📄 xmlj_dom.c
字号:
JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_getAttribute (JNIEnv * env, jobject self, jstring name){ xmlNodePtr node; const xmlChar *s_name; const xmlChar *s_value; node = xmljGetNodeID (env, self); s_name = xmljGetStringChars (env, name); s_value = xmlGetProp (node, s_name); xmlFree ((xmlChar *) s_name); return (s_value == NULL) ? xmljNewString (env, BAD_CAST "") : xmljNewString (env, s_value);}JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_setAttribute (JNIEnv * env, jobject self, jstring name, jstring value){ xmlNodePtr node; const xmlChar *s_name; const xmlChar *s_value; node = xmljGetNodeID (env, self); s_name = xmljGetStringChars (env, name); if (xmlValidateName (s_name, 0)) { xmljThrowDOMException (env, 5, NULL); /* INVALID_CHARACTER_ERR */ return; } s_value = xmljGetStringChars (env, value); xmlSetProp (node, s_name, s_value);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_getAttributeNode (JNIEnv * env, jobject self, jstring name){ xmlNodePtr node; const xmlChar *s_name; xmlAttrPtr attr; node = xmljGetNodeID (env, self); s_name = xmljGetStringChars (env, name); attr = xmlHasProp (node, s_name); if (attr == NULL) { return NULL; } xmlFree ((xmlChar *) s_name); return xmljGetNodeInstance (env, (xmlNodePtr) attr);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_setAttributeNode (JNIEnv * env, jobject self, jobject newAttr){ xmlNodePtr node; xmlAttrPtr new_attr; xmlAttrPtr old_attr; node = xmljGetNodeID (env, self); new_attr = (xmlAttrPtr) xmljGetNodeID (env, newAttr); if (new_attr->parent != NULL) { xmljThrowDOMException (env, 10, NULL); /* INUSE_ATTRIBUTE_ERR */ return NULL; } if (new_attr->doc != node->doc) { xmljThrowDOMException (env, 4, NULL); /* WRONG_DOCUMENT_ERR */ return NULL; } old_attr = xmlHasProp (node, new_attr->name); if (old_attr) { xmlUnlinkNode ((xmlNodePtr) old_attr); } xmljAddAttribute (node, new_attr); return xmljGetNodeInstance (env, (xmlNodePtr) old_attr);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_removeAttributeNode (JNIEnv * env, jobject self __attribute__ ((__unused__)), jobject oldAttr){ xmlNodePtr attr; attr = xmljGetNodeID (env, oldAttr); xmlUnlinkNode (attr); return oldAttr;}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_getAttributeNS (JNIEnv * env, jobject self, jstring uri, jstring localName){ xmlNodePtr node; const xmlChar *s_uri; const xmlChar *s_localName; const xmlChar *s_value; node = xmljGetNodeID (env, self); s_localName = xmljGetStringChars (env, localName); if (uri == NULL) { s_value = xmlGetNoNsProp (node, s_localName); } else { s_uri = xmljGetStringChars (env, uri); s_value = xmlGetNsProp (node, s_localName, s_uri); xmlFree ((xmlChar *) s_uri); } xmlFree ((xmlChar *) s_localName); return (s_value == NULL) ? xmljNewString (env, BAD_CAST "") : xmljNewString (env, s_value);}JNIEXPORT void JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_setAttributeNS (JNIEnv * env, jobject self, jstring uri, jstring qName, jstring value){ xmlNodePtr node; xmlNsPtr ns; const xmlChar *s_uri; const xmlChar *s_qName; const xmlChar *s_prefix; const xmlChar *s_localName; const xmlChar *s_value; node = xmljGetNodeID (env, self); s_qName = xmljGetStringChars (env, qName); if (xmlValidateQName (s_qName, 0)) { xmljThrowDOMException (env, 5, NULL); /* INVALID_CHARACTER_ERR */ return; } s_value = xmljGetStringChars (env, value); if (uri == NULL) { xmlSetProp (node, s_qName, s_value); } else { s_prefix = xmljGetPrefix (s_qName); s_localName = xmljGetLocalName (s_qName); s_uri = xmljGetStringChars (env, uri); ns = xmlNewNs (node, s_uri, s_prefix); xmlSetNsProp (node, ns, s_localName, s_value); }}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_getAttributeNodeNS (JNIEnv * env, jobject self, jstring uri, jstring localName){ xmlNodePtr node; xmlAttrPtr attr; const xmlChar *s_uri; const xmlChar *s_localName; node = xmljGetNodeID (env, self); attr = node->properties; s_uri = xmljGetStringChars (env, uri); s_localName = xmljGetStringChars (env, localName); while (attr != NULL) { if (uri == NULL) { if (xmljMatch (s_localName, (xmlNodePtr) attr)) break; } else { if (xmljMatchNS (s_uri, s_localName, (xmlNodePtr) attr)) break; } attr = attr->next; } xmlFree ((xmlChar *) s_uri); xmlFree ((xmlChar *) s_localName); return xmljGetNodeInstance (env, (xmlNodePtr) attr);}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_setAttributeNodeNS (JNIEnv * env, jobject self, jobject newAttr){ xmlNodePtr node; xmlAttrPtr new_attr; xmlAttrPtr old_attr; const xmlChar *uri; node = xmljGetNodeID (env, self); new_attr = (xmlAttrPtr) xmljGetNodeID (env, newAttr); if (new_attr->parent != NULL) { xmljThrowDOMException (env, 10, NULL); /* INUSE_ATTRIBUTE_ERR */ return NULL; } if (new_attr->doc != node->doc) { xmljThrowDOMException (env, 4, NULL); /* WRONG_DOCUMENT_ERR */ return NULL; } uri = (new_attr->ns != NULL) ? new_attr->ns->href : NULL; old_attr = xmlHasNsProp (node, new_attr->name, uri); if (old_attr) { xmlUnlinkNode ((xmlNodePtr) old_attr); } xmljAddAttribute (node, new_attr); return xmljGetNodeInstance (env, (xmlNodePtr) old_attr);}JNIEXPORT jboolean JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_hasAttribute (JNIEnv * env, jobject self, jstring name){ xmlNodePtr node; const xmlChar *s_name; const xmlChar *s_value; node = xmljGetNodeID (env, self); s_name = xmljGetStringChars (env, name); s_value = xmlGetProp (node, s_name); xmlFree ((xmlChar *) s_name); return (s_value != NULL);}JNIEXPORT jboolean JNICALLJava_gnu_xml_libxmlj_dom_GnomeElement_hasAttributeNS (JNIEnv * env, jobject self, jstring uri, jstring localName){ xmlNodePtr node; const xmlChar *s_uri; const xmlChar *s_localName; const xmlChar *s_value; node = xmljGetNodeID (env, self); s_localName = xmljGetStringChars (env, localName); if (uri == NULL) { s_value = xmlGetNoNsProp (node, s_localName); } else { s_uri = xmljGetStringChars (env, uri); s_value = xmlGetNsProp (node, s_localName, s_uri); xmlFree ((xmlChar *) s_uri); } xmlFree ((xmlChar *) s_localName); return (s_value != NULL);}/* -- GnomeEntity -- */JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeEntity_getPublicId (JNIEnv * env, jobject self){ xmlEntityPtr entity; entity = (xmlEntityPtr) xmljGetNodeID (env, self); return xmljNewString (env, entity->ExternalID);}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeEntity_getSystemId (JNIEnv * env, jobject self){ xmlEntityPtr entity; entity = (xmlEntityPtr) xmljGetNodeID (env, self); return xmljNewString (env, entity->SystemID);}JNIEXPORT jstring JNICALLJava_gnu_xml_libxmlj_dom_GnomeEntity_getNotationName (JNIEnv * env, jobject self __attribute__ ((__unused__))){ /* TODO */ xmljThrowDOMException (env, 9, NULL); /* NOT_SUPPORTED_ERR */ return NULL;}/* -- GnomeNamedNodeMap -- */JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_getNamedItem (JNIEnv * env, jobject self, jstring name){ 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 = xmljGetNamedItem (env, self, name); return xmljGetNodeInstance (env, (xmlNodePtr) attr); } else { xmlDtdPtr dtd; xmlHashTablePtr hash; const xmlChar *s_name; xmlNodePtr ret; dtd = (xmlDtdPtr) xmljGetNodeID (env, self); hash = (xmlHashTablePtr) ((type == 1) ? dtd->entities : dtd->notations); if (hash == NULL) { return NULL; } s_name = xmljGetStringChars (env, name); ret = (xmlNodePtr) xmlHashLookup (hash, s_name); xmlFree ((xmlChar *) s_name); return xmljGetNodeInstance (env, ret); }}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_setNamedItem (JNIEnv * env, jobject self, jobject arg){ jclass cls; jfieldID field; jint type; xmlNodePtr node; xmlNodePtr argNode; cls = (*env)->GetObjectClass (env, self); field = (*env)->GetFieldID (env, cls, "type", "I"); type = (*env)->GetIntField (env, self, field); node = xmljGetNodeID (env, self); argNode = xmljGetNodeID (env, arg); if (argNode->doc != node->doc) { xmljThrowDOMException (env, 4, NULL); /* WRONG_DOCUMENT_ERR */ } xmljValidateChildNode (env, node, argNode); if ((*env)->ExceptionOccurred (env)) { return NULL; } if (type == 0) { if (argNode->parent != NULL) { xmljThrowDOMException (env, 10, NULL); /* INUSE_ATTRIBUTE_ERR */ return NULL; } xmlAddChild (node, argNode); } else { xmlDtdPtr dtd; xmlHashTablePtr hash; dtd = (xmlDtdPtr) xmljGetNodeID (env, self); hash = (xmlHashTablePtr) ((type == 1) ? dtd->entities : dtd->notations); if (hash == NULL) { hash = xmlHashCreate (10); if (type == 1) { dtd->entities = hash; } else { dtd->notations = hash; } } xmlHashAddEntry (hash, argNode->name, argNode); } return arg;}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_removeNamedItem (JNIEnv * env, jobject self, jstring name){ 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 = xmljGetNamedItem (env, self, name); if (attr == NULL) { xmljThrowDOMException (env, 8, NULL); /* NOT_FOUND_ERR */ return NULL; } xmlUnlinkNode ((xmlNodePtr) attr); return xmljGetNodeInstance (env, (xmlNodePtr) attr); } else { xmlDtdPtr dtd; xmlHashTablePtr hash; const xmlChar *s_name; xmlNodePtr ret; dtd = (xmlDtdPtr) xmljGetNodeID (env, self); hash = (xmlHashTablePtr) ((type == 1) ? dtd->entities : dtd->notations); if (hash == NULL) { return NULL; } s_name = xmljGetStringChars (env, name); ret = (xmlNodePtr) xmlHashLookup (hash, s_name); if (ret != NULL) { xmlHashRemoveEntry (hash, s_name, NULL); } xmlFree ((xmlChar *) s_name); return xmljGetNodeInstance (env, ret); }}voidxmljHashScanner (void *payload, void *vdata, xmlChar *name){ xmljHashScanData *data; data = (xmljHashScanData *) vdata; if (data->count <= data->index) { data->node = (xmlNodePtr) payload; } data->count++;}JNIEXPORT jobject JNICALLJava_gnu_xml_libxmlj_dom_GnomeNamedNodeMap_item (JNIEnv * env, jobject self, jint index){ jclass cls; jfieldID field; jint type; cls = (*env)->GetObjectClass (env, self);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -