📄 xmlj_dom.c
字号:
xmlNodePtr last = NULL; cur = node->children; while (cur != NULL) { switch (cur->type) { case XML_CDATA_SECTION_NODE: case XML_TEXT_NODE: if (xmlIsBlankNode (cur)) { xmlNodePtr next = cur->next; xmlUnlinkNode (cur); xmlFreeNode (cur); cur = next; continue; } if (last != NULL) { last = xmlTextMerge (last, cur); xmlUnlinkNode (cur); xmlFreeNode (cur); cur = last; } else { last = cur; } break; default: last = NULL; xmljNormalizeNode (cur); } cur = cur->next; }}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getNamespaceURI (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); if (node->type != XML_ELEMENT_NODE && node->type != XML_ATTRIBUTE_NODE) { return NULL; } if (node->ns == NULL) { return NULL; } return xmljNewString (env, node->ns->href);}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getPrefix (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); if (node->type != XML_ELEMENT_NODE && node->type != XML_ATTRIBUTE_NODE) { return NULL; } if (node->ns == NULL) { return NULL; } return xmljNewString (env, node->ns->prefix);}JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_setPrefix (JNIEnv * env, jobject self, jstring prefix){ xmlNodePtr node; const xmlChar *s_prefix; s_prefix = xmljGetStringChars (env, prefix); if (xmlValidateName (s_prefix, 0)) { xmljThrowDOMException (env, 5, NULL); /* INVALID_CHARACTER_ERR */ } node = xmljGetNodeID (env, self); if (node->type != XML_ELEMENT_NODE && node->type != XML_ATTRIBUTE_NODE) { xmljThrowDOMException (env, 3, NULL); /* HIERARCHY_REQUEST_ERR */ return; } if (node->ns == NULL) { xmljThrowDOMException (env, 14, NULL); /* NAMESPACE_ERR */ return; } node->ns->prefix = s_prefix;}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getLocalName (JNIEnv * env, jobject self){ xmlNodePtr node; int *len; jstring ret; node = xmljGetNodeID (env, self); if (node->name == NULL) { return NULL; } len = (int *) malloc (sizeof (int)); if (xmlSplitQName3 (node->name, len) != NULL) { ret = xmljNewString (env, node->name + (*len)); } else { ret = xmljNewString (env, node->name); } free (len); return ret;}JNIEXPORT jboolean JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_hasAttributes (JNIEnv * env, jobject self){ xmlNodePtr node; node = xmljGetNodeID (env, self); return (node->properties != NULL);}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_getBaseURI (JNIEnv * env, jobject self){ xmlNodePtr node; xmlChar *baseURI; jstring ret; node = xmljGetNodeID (env, self); baseURI = xmlNodeGetBase (node->doc, node); ret = xmljNewString (env, (const xmlChar *) baseURI); if (baseURI != NULL) { xmlFree (baseURI); } return ret;}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_lookupPrefix (JNIEnv * env, jobject self, jstring namespaceURI){ xmlNodePtr node; xmlNsPtr ns; xmlDocPtr doc; const xmlChar *s_uri; node = xmljGetNodeID (env, self); doc = node->doc; /* If this is a document node, search from the root element */ if (node->type == XML_DOCUMENT_NODE) { doc = (xmlDocPtr) node; node = xmlDocGetRootElement (doc); } s_uri = xmljGetStringChars (env, namespaceURI); ns = xmlSearchNsByHref (doc, node, s_uri); xmlFree ((xmlChar *) s_uri); if (ns == NULL) { return NULL; } return xmljNewString (env, ns->prefix);}JNIEXPORT jboolean JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_isDefaultNamespace (JNIEnv * env, jobject self, jstring namespaceURI){ xmlNodePtr node; xmlNsPtr ns; const xmlChar *s_uri; node = xmljGetNodeID (env, self); s_uri = xmljGetStringChars (env, namespaceURI); ns = xmlSearchNsByHref (node->doc, node, s_uri); xmlFree ((xmlChar *) s_uri); if (ns == NULL) { return 0; } return (ns->prefix == NULL || xmlStrlen (ns->prefix) == 0);}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_lookupNamespaceURI (JNIEnv * env, jobject self, jstring prefix){ xmlNodePtr node; xmlDocPtr doc; xmlNsPtr ns; const xmlChar *s_prefix; node = xmljGetNodeID (env, self); doc = node->doc; /* If this is a document node, search from the root element */ if (node->type == XML_DOCUMENT_NODE) { doc = (xmlDocPtr) node; node = xmlDocGetRootElement (doc); } s_prefix = xmljGetStringChars (env, prefix); ns = xmlSearchNs (doc, node, s_prefix); xmlFree ((xmlChar *) s_prefix); if (ns == NULL) { return NULL; } return xmljNewString (env, ns->href);}JNIEXPORT jint JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_xmljCompareTo (JNIEnv * env, jobject self, jobject other){ xmlNodePtr n1, n2, x; int d1, d2, delta, c; n1 = xmljGetNodeID (env, self); n2 = xmljGetNodeID (env, other); if (n1->doc != n2->doc) { return 0; } if (n1->type == XML_ATTRIBUTE_NODE || n2->type == XML_ATTRIBUTE_NODE) { return 0; } d1 = 0; for (x = n1->parent; x && x->type != XML_DOCUMENT_NODE; x = x->parent) { d1++; } d2 = 0; for (x = n2->parent; x && x->type != XML_DOCUMENT_NODE; x = x->parent) { d2++; } delta = d1 - d2; while (d1 > d2) { n1 = n1->parent; d1--; } while (d2 > d1) { n2 = n2->parent; d2--; } c = xmljCompare (n1, n2); return (c != 0) ? c : delta;}/* Compare at same level */intxmljCompare (xmlNodePtr n1, xmlNodePtr n2){ int c, i1, i2; if (n1->parent == NULL || n1->type == XML_DOCUMENT_NODE || n2->parent == NULL || n2->type == XML_DOCUMENT_NODE || n1 == n2) { return 0; } c = xmljCompare (n1->parent, n2->parent); if (c != 0) { return c; } i1 = 0; for (n1 = n1->prev; n1; n1 = n1->prev) { i1++; } i2 = 0; for (n2 = n2->prev; n2; n2 = n2->prev) { i2++; } return i1 - i2;}intxmljIsEqualNodeList (xmlNodePtr node1, xmlNodePtr node2){ while (node1 != NULL) { if (!xmljIsEqualNode (node1, node2)) { return 0; } node1 = node1->next; node2 = node2->next; } return 1;}intxmljIsEqualNode (xmlNodePtr node1, xmlNodePtr node2){ const xmlChar *val1; const xmlChar *val2; if (node1 == node2) { return 1; } if (node1 == NULL || node2 == NULL) { return 0; } /* Check node type */ if (node1->type != node2->type) { return 0; } /* Check node name */ if (!xmlStrEqual (node1->name, node2->name)) { return 0; } /* Check node namespace */ if (node1->type == XML_ELEMENT_NODE || node1->type == XML_ATTRIBUTE_NODE) { xmlNsPtr ns1, ns2; ns1 = node1->ns; if (ns1 != NULL) { ns2 = node2->ns; if (ns2 == NULL) { return 0; } val1 = ns1->href; val2 = ns2->href; if (!xmlStrEqual (val1, val2)) { return 0; } } } /* Check node value */ val1 = xmljGetNodeValue (node1); val2 = xmljGetNodeValue (node2); if (!xmlStrEqual (val1, val2)) { return 0; } /* Check attributes */ if (node1->type == XML_ELEMENT_NODE && !xmljIsEqualNodeList ((xmlNodePtr) node1->properties, (xmlNodePtr) node2->properties)) { return 0; } /* Check doctype */ if (node1->type == XML_DOCUMENT_NODE) { xmlDocPtr doc1 = (xmlDocPtr) node1; xmlDocPtr doc2 = (xmlDocPtr) node2; if (!xmljIsEqualNode ((xmlNodePtr) doc1->intSubset, (xmlNodePtr) doc2->intSubset) || !xmljIsEqualNode ((xmlNodePtr) doc1->extSubset, (xmlNodePtr) doc2->extSubset)) { return 0; } } /* Check child nodes */ if (!xmljIsEqualNodeList (node1->children, node2->children)) { return 0; } return 1;}JNIEXPORT jboolean JNICALLJava_gnu_xml_libxmlj_dom_GnomeNode_isEqualNode (JNIEnv * env, jobject self, jobject arg){ xmlNodePtr node1; xmlNodePtr node2; node1 = xmljGetNodeID (env, self); node2 = xmljGetNodeID (env, arg); return xmljIsEqualNode (node1, node2);}/* -- GnomeNodeList -- */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNodeList_item (JNIEnv * env, jobject self, jint index){ xmlNodePtr node; jint count; node = xmljGetNodeID (env, self); node = node->children; count = 0; for (count = 0; node != NULL && count < index; count++) { node = node->next; } return xmljGetNodeInstance (env, node);}JNIEXPORT jint JNICALLJava_gnu_xml_libxmlj_dom_GnomeNodeList_getLength (JNIEnv * env, jobject self){ xmlNodePtr node; jint count; node = xmljGetNodeID (env, self); count = 0; node = node->children; while (node != NULL) { count++; node = node->next; } return count;}/* -- GnomeNotation -- */JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNotation_getPublicId (JNIEnv * env, jobject self){ xmlNotationPtr notation; notation = (xmlNotationPtr) xmljGetNodeID (env, self); if (notation->PublicID == NULL) { return NULL; } return xmljNewString (env, notation->PublicID);}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeNotation_getSystemId (JNIEnv * env, jobject self){ xmlNotationPtr notation; notation = (xmlNotationPtr) xmljGetNodeID (env, self); if (notation->SystemID == NULL) { return NULL; } return xmljNewString (env, notation->SystemID);}/* -- GnomeProcessingInstruction -- */JNIEXPORT jstring JNICA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -