📄 xmlj_dom.c
字号:
field = (*env)->GetFieldID (env, cls, "type", "I"); type = (*env)->GetIntField (env, self, field); if (type == 0) { xmlNodePtr node; xmlAttrPtr attr; jint count; node = xmljGetNodeID (env, self); switch (node->type) { case XML_ELEMENT_NODE: attr = node->properties; for (count = 0; attr != NULL && count < index; count++) { attr = attr->next; } if (attr == NULL) { char msg[1024]; sprintf (msg, "No attribute at index %d\n", (int) index); xmljThrowException (env, "java/lang/NullPointerException", msg); return NULL; } return xmljGetNodeInstance (env, (xmlNodePtr) attr); default: return NULL; } } else { xmlDtdPtr dtd; xmlHashTablePtr hash; xmljHashScanData *data; xmlNodePtr ret; dtd = (xmlDtdPtr) xmljGetNodeID (env, self); hash = (xmlHashTablePtr) ((type == 1) ? dtd->entities : dtd->notations); if (hash == NULL) { return NULL; } data = (xmljHashScanData *) malloc (sizeof (xmljHashScanData)); if (data == NULL) { return NULL; } data->index = index; data->count = 0; data->node = NULL; xmlHashScan (hash, xmljHashScanner, data); ret = data->node; free (data); return xmljGetNodeInstance (env, ret); }}JNIEXPORT jint JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_getLength (JNIEnv * env, jobject self){ jclass cls; jfieldID field; jint type; cls = (*env)->GetObjectClass (env, self); field = (*env)->GetFieldID (env, cls, "type", "I"); type = (*env)->GetIntField (env, self, field); if (type == 0) { xmlNodePtr node; xmlAttrPtr attr; jint count; node = xmljGetNodeID (env, self); switch (node->type) { case XML_ELEMENT_NODE: count = 0; attr = node->properties; while (attr != NULL) { count++; attr = attr->next; } return count; default: return -1; } } else { xmlDtdPtr dtd; xmlHashTablePtr hash; xmljHashScanData *data; jint ret; dtd = (xmlDtdPtr) xmljGetNodeID (env, self); hash = (xmlHashTablePtr) ((type == 1) ? dtd->entities : dtd->notations); if (hash == NULL) { return 0; } data = (xmljHashScanData *) malloc (sizeof (xmljHashScanData)); if (data == NULL) { return 0; } data->index = -1; data->count = 0; data->node = NULL; xmlHashScan (hash, xmljHashScanner, data); ret = data->count; free (data); return ret; }}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_getNamedItemNS (JNIEnv * env, jobject self, jstring uri, jstring localName){ jclass cls; jfieldID field; jint type; cls = (*env)->GetObjectClass (env, self); field = (*env)->GetFieldID (env, cls, "type", "I"); type = (*env)->GetIntField (env, self, field); if (type == 0) { xmlAttrPtr attr; attr = xmljGetNamedItemNS (env, self, uri, localName); return xmljGetNodeInstance (env, (xmlNodePtr) attr); } else { return NULL; }}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_setNamedItemNS (JNIEnv * env, jobject self, jobject arg){ return Java_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_setNamedItem (env, self, arg);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_removeNamedItemNS (JNIEnv * env, jobject self, jstring uri, jstring localName){ jclass cls; jfieldID field; jint type; cls = (*env)->GetObjectClass (env, self); field = (*env)->GetFieldID (env, cls, "type", "I"); type = (*env)->GetIntField (env, self, field); if (type == 0) { xmlAttrPtr attr; attr = xmljGetNamedItemNS (env, self, uri, localName); if (attr == NULL) { xmljThrowDOMException (env, 8, NULL); /* NOT_FOUND_ERR */ return NULL; } else { xmlUnlinkNode ((xmlNodePtr) attr); return xmljGetNodeInstance (env, (xmlNodePtr) attr); } } else { return NULL; }}/* -- GnomeNode -- */JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getNodeName (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); if (node == NULL) { return NULL; } return xmljNewString (env, node->name);}xmlChar *xmljGetNodeValue (xmlNodePtr node){ /* If not character data, return null */ switch (node->type) { case XML_TEXT_NODE: case XML_CDATA_SECTION_NODE: case XML_COMMENT_NODE: case XML_ATTRIBUTE_NODE: return xmlNodeGetContent (node); default: return NULL; }}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getNodeValue (JNIEnv * env, jobject self){ xmlNodePtr node; xmlChar *text; jstring ret; node = xmljGetNodeID (env, self); text = xmljGetNodeValue (node); ret = xmljNewString (env, (const xmlChar *) text); if (text != NULL) { xmlFree (text); } return ret;}JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_setNodeValue (JNIEnv * env, jobject self, jstring nodeValue){ xmlNodePtr node; const xmlChar *s_nodeValue; node = xmljGetNodeID (env, self); /* If not character data, return */ if (node->type != XML_TEXT_NODE && node->type != XML_CDATA_SECTION_NODE && node->type != XML_COMMENT_NODE) return; s_nodeValue = xmljGetStringChars (env, nodeValue); xmlNodeSetContent (node, s_nodeValue);}JNIEXPORT jshort JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getNodeType (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); switch (node->type) { case XML_DTD_NODE: return XML_DOCUMENT_TYPE_NODE; case XML_ATTRIBUTE_DECL: return XML_ATTRIBUTE_NODE; case XML_ENTITY_DECL: return XML_ENTITY_NODE; default: return node->type; }}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getParentNode (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return xmljGetNodeInstance (env, node->parent);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getFirstChild (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return xmljGetNodeInstance (env, node->children);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getLastChild (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return xmljGetNodeInstance (env, node->last);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getPreviousSibling (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return xmljGetNodeInstance (env, node->prev);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getNextSibling (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return xmljGetNodeInstance (env, node->next);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getOwnerDocument (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return xmljGetNodeInstance (env, (xmlNodePtr) node->doc);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_xmljInsertBefore (JNIEnv * env, jobject self, jobject newChild, jobject refChild){ xmlNodePtr node; xmlNodePtr newChildNode; xmlNodePtr refChildNode; node = xmljGetNodeID (env, self); newChildNode = xmljGetNodeID (env, newChild); refChildNode = xmljGetNodeID (env, refChild); /* Is refChildNode a child of this node? */ if (refChildNode == NULL || refChildNode->parent == NULL || refChildNode->parent != node) { xmljThrowDOMException (env, 8, NULL); /* NOT_FOUND_ERR */ return NULL; } /* Check new child */ xmljValidateChildNode (env, node, newChildNode); if ((*env)->ExceptionOccurred (env)) { return NULL; } newChildNode = xmlAddPrevSibling (refChildNode, newChildNode); return xmljGetNodeInstance (env, newChildNode);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_xmljReplaceChild (JNIEnv * env, jobject self, jobject newChild, jobject oldChild){ xmlNodePtr node; xmlNodePtr newChildNode; xmlNodePtr oldChildNode; node = xmljGetNodeID (env, self); newChildNode = xmljGetNodeID (env, newChild); oldChildNode = xmljGetNodeID (env, oldChild); /* Is oldChildNode a child of this node? */ if (oldChildNode == NULL || oldChildNode->parent == NULL || oldChildNode->parent != node) { xmljThrowDOMException (env, 8, NULL); /* NOT_FOUND_ERR */ return NULL; } /* Check new child */ xmljValidateChildNode (env, node, newChildNode); if ((*env)->ExceptionOccurred (env)) { return NULL; } newChildNode = xmlReplaceNode (oldChildNode, newChildNode); return xmljGetNodeInstance (env, newChildNode);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_xmljRemoveChild (JNIEnv * env, jobject self, jobject oldChild){ xmlNodePtr node; xmlNodePtr oldChildNode; node = xmljGetNodeID (env, self); oldChildNode = xmljGetNodeID (env, oldChild); if (oldChildNode == NULL || oldChildNode->parent == NULL || oldChildNode->parent != node) { xmljThrowDOMException (env, 8, NULL); /* NOT_FOUND_ERR */ return NULL; } xmlUnlinkNode (oldChildNode); return oldChild;}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_xmljAppendChild (JNIEnv * env, jobject self, jobject newChild){ xmlNodePtr node; xmlNodePtr newChildNode; node = xmljGetNodeID (env, self); newChildNode = xmljGetNodeID (env, newChild); /* Check new child */ xmljValidateChildNode (env, node, newChildNode); if ((*env)->ExceptionOccurred (env)) { return NULL; } newChildNode = xmlAddChild (node, newChildNode); return xmljGetNodeInstance (env, newChildNode);}JNIEXPORT jboolean JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_hasChildNodes (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return (node->children != NULL);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_xmljCloneNode (JNIEnv * env, jobject self, jboolean deep){ xmlNodePtr node; xmlNodePtr clone; node = xmljGetNodeID (env, self); clone = xmlCopyNode (node, deep); clone->parent = NULL; clone->doc = node->doc; return xmljGetNodeInstance (env, clone);}JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_normalize (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); xmljNormalizeNode (node);}voidxmljNormalizeNode (xmlNodePtr node){ xmlNodePtr cur;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -