15#pragma convert("ISO8859-1")
27#ifdef LIBXML_ZLIB_ENABLED
38#ifdef LIBXML_HTML_ENABLED
41#ifdef LIBXML_DEBUG_ENABLED
94 msg =
"invalid hexadecimal character value\n";
97 msg =
"invalid decimal character value\n";
100 msg =
"unterminated entity reference %15s\n";
103 msg =
"string is not in UTF-8\n";
106 msg =
"unexpected error number\n";
120 {
't',
'e',
'x',
't',
'n',
'o',
'e',
'n',
'c', 0 };
124static int xmlCompressMode = 0;
125static int xmlCheckDTD = 1;
127#define UPDATE_LAST_CHILD_AND_PARENT(n) if ((n) != NULL) { \
128 xmlNodePtr ulccur = (n)->children; \
129 if (ulccur == NULL) { \
132 while (ulccur->next != NULL) { \
133 ulccur->parent = (n); \
134 ulccur = ulccur->next; \
136 ulccur->parent = (n); \
137 (n)->last = ulccur; \
140#define IS_STR_XML(str) ((str != NULL) && (str[0] == 'x') && \
141 (str[1] == 'm') && (str[2] == 'l') && (str[3] == 0))
151#ifdef LIBXML_TREE_ENABLED
163xmlGetEntityFromDtd(
const xmlDtd *dtd,
const xmlChar *
name) {
166 if((dtd !=
NULL) && (dtd->entities !=
NULL)) {
184xmlGetParameterEntityFromDtd(
const xmlDtd *dtd,
const xmlChar *
name) {
187 if ((dtd !=
NULL) && (dtd->pentities !=
NULL)) {
225 lenn =
strlen((
char *) ncname);
240 ret[lenn + lenp + 1] = 0;
270#ifndef XML_XML_NAMESPACE
272 if ((
name[0] ==
'x') && (
name[1] ==
'm') &&
273 (
name[2] ==
'l') && (
name[3] ==
':'))
353#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
378 if (((*
cur >=
'a') && (*
cur <=
'z')) || ((*
cur >=
'A') && (*
cur <=
'Z')) ||
383 while (((*
cur >=
'a') && (*
cur <=
'z')) ||
384 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
385 ((*
cur >=
'0') && (*
cur <=
'9')) ||
386 (*
cur ==
'_') || (*
cur ==
'-') || (*
cur ==
'.'))
427#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
450 if (((*
cur >=
'a') && (*
cur <=
'z')) || ((*
cur >=
'A') && (*
cur <=
'Z')) ||
455 while (((*
cur >=
'a') && (*
cur <=
'z')) ||
456 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
457 ((*
cur >=
'0') && (*
cur <=
'9')) ||
458 (*
cur ==
'_') || (*
cur ==
'-') || (*
cur ==
'.'))
462 if (((*
cur >=
'a') && (*
cur <=
'z')) ||
463 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
468 while (((*
cur >=
'a') && (*
cur <=
'z')) ||
469 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
470 ((*
cur >=
'0') && (*
cur <=
'9')) ||
471 (*
cur ==
'_') || (*
cur ==
'-') || (*
cur ==
'.'))
548 if (((*
cur >=
'a') && (*
cur <=
'z')) || ((*
cur >=
'A') && (*
cur <=
'Z')) ||
549 (*
cur ==
'_') || (*
cur ==
':'))
553 while (((*
cur >=
'a') && (*
cur <=
'z')) ||
554 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
555 ((*
cur >=
'0') && (*
cur <=
'9')) ||
556 (*
cur ==
'_') || (*
cur ==
'-') || (*
cur ==
'.') || (*
cur ==
':'))
617 if (((*
cur >=
'a') && (*
cur <=
'z')) ||
618 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
619 ((*
cur >=
'0') && (*
cur <=
'9')) ||
620 (*
cur ==
'_') || (*
cur ==
'-') || (*
cur ==
'.') || (*
cur ==
':'))
624 while (((*
cur >=
'a') && (*
cur <=
'z')) ||
625 ((*
cur >=
'A') && (*
cur <=
'Z')) ||
626 ((*
cur >=
'0') && (*
cur <=
'9')) ||
627 (*
cur ==
'_') || (*
cur ==
'-') || (*
cur ==
'.') || (*
cur ==
':'))
684xmlSetBufferAllocationScheme(xmlBufferAllocationScheme
scheme) {
685 if ((
scheme == XML_BUFFER_ALLOC_EXACT) ||
686 (
scheme == XML_BUFFER_ALLOC_DOUBLEIT) ||
687 (
scheme == XML_BUFFER_ALLOC_HYBRID))
704xmlBufferAllocationScheme
705xmlGetBufferAllocationScheme(
void) {
755 cur->type = XML_LOCAL_NAMESPACE;
770 xmlNsPtr prev =
node->nsDef;
772 if (((prev->prefix ==
NULL) && (
cur->prefix ==
NULL)) ||
777 while (prev->next !=
NULL) {
779 if (((prev->prefix ==
NULL) && (
cur->prefix ==
NULL)) ||
799xmlSetNs(xmlNodePtr
node, xmlNsPtr
ns) {
803 if ((
node->type == XML_ELEMENT_NODE) ||
804 (
node->type == XML_ATTRIBUTE_NODE))
815xmlFreeNs(xmlNsPtr
cur) {
831xmlFreeNsList(xmlNsPtr
cur) {
860 if ((doc !=
NULL) && (doc->extSubset !=
NULL)) {
873 cur->type = XML_DTD_NODE;
877 if (ExternalID !=
NULL)
879 if (SystemID !=
NULL)
882 doc->extSubset =
cur;
899xmlGetIntSubset(
const xmlDoc *doc) {
906 if (
cur->type == XML_DTD_NODE)
907 return((xmlDtdPtr)
cur);
910 return((xmlDtdPtr) doc->intSubset);
924xmlCreateIntSubset(xmlDocPtr doc,
const xmlChar *
name,
928 if ((doc !=
NULL) && (xmlGetIntSubset(doc) !=
NULL)) {
941 cur->type = XML_DTD_NODE;
951 if (ExternalID !=
NULL) {
961 if (SystemID !=
NULL) {
974 doc->intSubset =
cur;
977 if (doc->children ==
NULL) {
978 doc->children = (xmlNodePtr)
cur;
979 doc->last = (xmlNodePtr)
cur;
981 if (doc->type == XML_HTML_DOCUMENT_NODE) {
984 prev = doc->children;
985 prev->prev = (xmlNodePtr)
cur;
987 doc->children = (xmlNodePtr)
cur;
991 next = doc->children;
992 while ((
next !=
NULL) && (
next->type != XML_ELEMENT_NODE))
995 cur->prev = doc->last;
996 cur->prev->next = (xmlNodePtr)
cur;
998 doc->last = (xmlNodePtr)
cur;
1003 doc->children = (xmlNodePtr)
cur;
1005 cur->prev->next = (xmlNodePtr)
cur;
1006 next->prev = (xmlNodePtr)
cur;
1024#define DICT_FREE(str) \
1025 if ((str) && ((!dict) || \
1026 (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
1027 xmlFree((char *)(str));
1037#define DICT_COPY(str, cpy) \
1040 if (xmlDictOwns(dict, (const xmlChar *)(str))) \
1041 cpy = (xmlChar *) (str); \
1043 cpy = (xmlChar *) xmlDictLookup((dict), (const xmlChar *)(str), -1); \
1045 cpy = xmlStrdup((const xmlChar *)(str)); }
1054#define DICT_CONST_COPY(str, cpy) \
1057 if (xmlDictOwns(dict, (const xmlChar *)(str))) \
1058 cpy = (const xmlChar *) (str); \
1060 cpy = xmlDictLookup((dict), (const xmlChar *)(str), -1); \
1062 cpy = (const xmlChar *) xmlStrdup((const xmlChar *)(str)); }
1072xmlFreeDtd(xmlDtdPtr
cur) {
1084 xmlNodePtr
next,
c =
cur->children;
1092 if ((
c->type != XML_NOTATION_NODE) &&
1093 (
c->type != XML_ELEMENT_DECL) &&
1094 (
c->type != XML_ATTRIBUTE_DECL) &&
1095 (
c->type != XML_ENTITY_DECL)) {
1145 cur->type = XML_DOCUMENT_NODE;
1153 cur->standalone = -1;
1154 cur->compression = -1;
1156 cur->parseFlags = 0;
1157 cur->properties = XML_DOC_USERBUILT;
1177xmlFreeDoc(xmlDocPtr
cur) {
1178 xmlDtdPtr extSubset, intSubset;
1197 extSubset =
cur->extSubset;
1198 intSubset =
cur->intSubset;
1199 if (intSubset == extSubset)
1201 if (extSubset !=
NULL) {
1202 xmlUnlinkNode((xmlNodePtr)
cur->extSubset);
1204 xmlFreeDtd(extSubset);
1206 if (intSubset !=
NULL) {
1207 xmlUnlinkNode((xmlNodePtr)
cur->intSubset);
1209 xmlFreeDtd(intSubset);
1212 if (
cur->children !=
NULL) xmlFreeNodeList(
cur->children);
1213 if (
cur->oldNs !=
NULL) xmlFreeNsList(
cur->oldNs);
1253 if (
cur[0] ==
'&') {
1265 if ((
cur + 2 <
end) && (
cur[1] ==
'#') && (
cur[2] ==
'x')) {
1271 while (tmp !=
';') {
1282 if ((tmp >=
'0') && (tmp <=
'9'))
1283 charval = charval * 16 + (tmp -
'0');
1284 else if ((tmp >=
'a') && (tmp <=
'f'))
1285 charval = charval * 16 + (tmp -
'a') + 10;
1286 else if ((tmp >=
'A') && (tmp <=
'F'))
1287 charval = charval * 16 + (tmp -
'A') + 10;
1303 }
else if ((
cur + 1 <
end) && (
cur[1] ==
'#')) {
1309 while (tmp !=
';') {
1311 if ((tmp >=
'0') && (tmp <=
'9'))
1312 charval = charval * 10 + (tmp -
'0');
1346 if ((ent !=
NULL) &&
1374 node = xmlNewReference(doc,
val);
1379 else if ((ent !=
NULL) &&
1389 ent->children = xmlStringGetNodeList(doc,
1392 ent->flags &= ~XML_ENT_EXPANDING;
1394 temp = ent->children;
1396 temp->parent = (xmlNodePtr)ent;
1464xmlStringGetNodeList(
const xmlDoc *doc,
const xmlChar *
value) {
1481 if (
cur[0] ==
'&') {
1493 if ((
cur[1] ==
'#') && (
cur[2] ==
'x')) {
1496 while (tmp !=
';') {
1498 if ((tmp >=
'0') && (tmp <=
'9'))
1499 charval = charval * 16 + (tmp -
'0');
1500 else if ((tmp >=
'a') && (tmp <=
'f'))
1501 charval = charval * 16 + (tmp -
'a') + 10;
1502 else if ((tmp >=
'A') && (tmp <=
'F'))
1503 charval = charval * 16 + (tmp -
'A') + 10;
1516 }
else if (
cur[1] ==
'#') {
1519 while (tmp !=
';') {
1521 if ((tmp >=
'0') && (tmp <=
'9'))
1522 charval = charval * 10 + (tmp -
'0');
1541 while ((*
cur != 0) && (*
cur !=
';'))
cur++;
1544 (xmlNodePtr) doc, (
const char *)
q);
1553 if ((ent !=
NULL) &&
1579 node = xmlNewReference(doc,
val);
1582 if ((ent !=
NULL) &&
1592 ent->children = xmlStringGetNodeList(doc,
1595 ent->flags &= ~XML_ENT_EXPANDING;
1597 temp = ent->children;
1599 temp->parent = (xmlNodePtr)ent;
1672xmlNodeListGetString(xmlDocPtr doc,
const xmlNode *
list,
int inLine)
1681 if ((
list->parent !=
NULL) && (
list->parent->type == XML_ATTRIBUTE_NODE))
1687 if ((
node->type == XML_TEXT_NODE) ||
1688 (
node->type == XML_CDATA_SECTION_NODE)) {
1703 }
else if (
node->type == XML_ENTITY_REF_NODE) {
1716 buffer = xmlNodeListGetString(doc, ent->children, 1);
1739 "xmlGetNodeListString : invalid node type %d\n",
1748#ifdef LIBXML_TREE_ENABLED
1762xmlNodeListGetRawString(
const xmlDoc *doc,
const xmlNode *
list,
int inLine)
1772 if ((
node->type == XML_TEXT_NODE) ||
1773 (
node->type == XML_CDATA_SECTION_NODE)) {
1785 }
else if (
node->type == XML_ENTITY_REF_NODE) {
1799 xmlNodeListGetRawString(doc, ent->children, 1);
1822 "xmlGetNodeListString : invalid node type %d\n",
1833xmlNewPropInternal(xmlNodePtr
node, xmlNsPtr
ns,
1838 xmlDocPtr doc =
NULL;
1840 if ((
node !=
NULL) && (
node->type != XML_ELEMENT_NODE)) {
1841 if ((eatname == 1) &&
1853 if ((eatname == 1) &&
1862 cur->type = XML_ATTRIBUTE_NODE;
1872 if ((doc !=
NULL) && (doc->dict !=
NULL))
1882 cur->children = xmlNewDocText(doc,
value);
1884 tmp =
cur->children;
1885 while (tmp !=
NULL) {
1886 tmp->parent = (xmlNodePtr)
cur;
1887 if (tmp->next ==
NULL)
1900 xmlAttrPtr prev =
node->properties;
1902 while (prev->next !=
NULL)
1918#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
1919 defined(LIBXML_SCHEMAS_ENABLED)
2013 cur->type = XML_ATTRIBUTE_NODE;
2015 if ((doc !=
NULL) && (doc->dict !=
NULL))
2023 cur->children = xmlStringGetNodeList(doc,
value);
2026 tmp =
cur->children;
2027 while (tmp !=
NULL) {
2028 tmp->parent = (xmlNodePtr)
cur;
2029 if (tmp->next ==
NULL)
2047xmlFreePropList(xmlAttrPtr
cur) {
2064xmlFreeProp(xmlAttrPtr
cur) {
2074 if ((
cur->doc !=
NULL) && (
cur->atype == XML_ATTRIBUTE_ID)) {
2077 if (
cur->children !=
NULL) xmlFreeNodeList(
cur->children);
2092xmlRemoveProp(xmlAttrPtr
cur) {
2100 tmp =
cur->parent->properties;
2102 cur->parent->properties =
cur->next;
2108 while (tmp !=
NULL) {
2109 if (tmp->next ==
cur) {
2110 tmp->next =
cur->next;
2111 if (tmp->next !=
NULL)
2112 tmp->next->prev = tmp;
2147 cur->type = XML_PI_NODE;
2149 if ((doc !=
NULL) && (doc->dict !=
NULL))
2208 cur->type = XML_ELEMENT_NODE;
2249 cur->type = XML_ELEMENT_NODE;
2276xmlNewDocNode(xmlDocPtr doc, xmlNsPtr
ns,
2280 if ((doc !=
NULL) && (doc->dict !=
NULL))
2288 cur->children = xmlStringGetNodeList(doc,
content);
2313xmlNewDocNodeEatName(xmlDocPtr doc, xmlNsPtr
ns,
2321 cur->children = xmlStringGetNodeList(doc,
content);
2327 ((doc ==
NULL) || (doc->dict ==
NULL) ||
2334#ifdef LIBXML_TREE_ENABLED
2348xmlNewDocRawNode(xmlDocPtr doc, xmlNsPtr
ns,
2371xmlNewDocFragment(xmlDocPtr doc) {
2383 cur->type = XML_DOCUMENT_FRAG_NODE;
2416 cur->type = XML_TEXT_NODE;
2428#ifdef LIBXML_TREE_ENABLED
2449xmlNewTextChild(xmlNodePtr
parent, xmlNsPtr
ns,
2451 xmlNodePtr
cur, prev;
2464 if (
parent->type == XML_ELEMENT_NODE) {
2469 }
else if ((
parent->type == XML_DOCUMENT_NODE) ||
2470 (
parent->type == XML_HTML_DOCUMENT_NODE)) {
2475 }
else if (
parent->type == XML_DOCUMENT_FRAG_NODE) {
2485 cur->type = XML_ELEMENT_NODE;
2511xmlNewCharRef(xmlDocPtr doc,
const xmlChar *
name) {
2526 cur->type = XML_ENTITY_REF_NODE;
2529 if (
name[0] ==
'&') {
2554xmlNewReference(
const xmlDoc *doc,
const xmlChar *
name) {
2570 cur->type = XML_ENTITY_REF_NODE;
2572 cur->doc = (xmlDoc *)doc;
2573 if (
name[0] ==
'&') {
2586 cur->content = ent->content;
2592 cur->children = (xmlNodePtr) ent;
2593 cur->last = (xmlNodePtr) ent;
2641 cur->type = XML_TEXT_NODE;
2694 cur->type = XML_COMMENT_NODE;
2728 cur->type = XML_CDATA_SECTION_NODE;
2758 const xmlChar *newValue = oldValue;
2760 int oldDictOwnsOldValue = oldDict && (
xmlDictOwns(oldDict, oldValue) == 1);
2761 if (oldDictOwnsOldValue) {
2779xmlSetTreeDoc(xmlNodePtr
tree, xmlDocPtr doc) {
2782 if ((
tree ==
NULL) || (
tree->type == XML_NAMESPACE_DECL))
2784 if (
tree->doc != doc) {
2788 if(
tree->type == XML_ELEMENT_NODE) {
2789 prop =
tree->properties;
2790 while (prop !=
NULL) {
2791 if (prop->atype == XML_ATTRIBUTE_ID) {
2795 if (prop->doc != doc) {
2797 prop->
name = _copyStringForNewDictIfNeeded(oldPropDict, newDict, prop->name);
2800 xmlSetListDoc(prop->children, doc);
2810 xmlChar *idVal = xmlNodeListGetString(doc, prop->children,
2819 if (
tree->type == XML_ENTITY_REF_NODE) {
2825 }
else if (
tree->children !=
NULL) {
2826 xmlSetListDoc(
tree->children, doc);
2829 tree->name = _copyStringForNewDictIfNeeded(oldTreeDict, newDict,
tree->name);
2830 tree->content = (
xmlChar *)_copyStringForNewDictIfNeeded(oldTreeDict,
NULL,
tree->content);
2844xmlSetListDoc(xmlNodePtr
list, xmlDocPtr doc) {
2847 if ((
list ==
NULL) || (
list->type == XML_NAMESPACE_DECL))
2851 if (
cur->doc != doc)
2852 xmlSetTreeDoc(
cur, doc);
2857#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
2876xmlNewChild(xmlNodePtr
parent, xmlNsPtr
ns,
2878 xmlNodePtr
cur, prev;
2891 if (
parent->type == XML_ELEMENT_NODE) {
2896 }
else if ((
parent->type == XML_DOCUMENT_NODE) ||
2897 (
parent->type == XML_HTML_DOCUMENT_NODE)) {
2902 }
else if (
parent->type == XML_DOCUMENT_FRAG_NODE) {
2912 cur->type = XML_ELEMENT_NODE;
2945xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr
cur, xmlNodePtr prop) {
2948 if ((
cur ==
NULL) || (
cur->type != XML_ATTRIBUTE_NODE) ||
2949 (prop ==
NULL) || (prop->type != XML_ATTRIBUTE_NODE) ||
2950 ((prev !=
NULL) && (prev->type != XML_ATTRIBUTE_NODE)))
2954 if (prop->ns ==
NULL)
2955 attr = xmlHasNsProp(
cur->parent, prop->name,
NULL);
2957 attr = xmlHasNsProp(
cur->parent, prop->name, prop->ns->href);
2959 if (prop->doc !=
cur->doc) {
2960 xmlSetTreeDoc(prop,
cur->doc);
2962 prop->parent =
cur->parent;
2965 prop->next = prev->next;
2968 prop->next->prev = prop;
2973 if (prop->prev ==
NULL && prop->parent !=
NULL)
2974 prop->parent->properties = (xmlAttrPtr) prop;
2975 if ((
attr !=
NULL) && (
attr->type != XML_ATTRIBUTE_DECL)) {
2977 xmlRemoveProp((xmlAttrPtr)
attr);
2999xmlAddNextSibling(xmlNodePtr
cur, xmlNodePtr
elem) {
3000 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL)) {
3003 if ((
elem ==
NULL) || (
elem->type == XML_NAMESPACE_DECL)) {
3011 xmlUnlinkNode(
elem);
3013 if (
elem->type == XML_TEXT_NODE) {
3014 if (
cur->type == XML_TEXT_NODE) {
3015 xmlNodeAddContent(
cur,
elem->content);
3019 if ((
cur->next !=
NULL) && (
cur->next->type == XML_TEXT_NODE) &&
3020 (
cur->name ==
cur->next->name)) {
3025 xmlNodeSetContent(
cur->next, tmp);
3030 }
else if (
elem->type == XML_ATTRIBUTE_NODE) {
3035 xmlSetTreeDoc(
elem,
cur->doc);
3048#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
3049 defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
3067xmlAddPrevSibling(xmlNodePtr
cur, xmlNodePtr
elem) {
3068 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL)) {
3071 if ((
elem ==
NULL) || (
elem->type == XML_NAMESPACE_DECL)) {
3079 xmlUnlinkNode(
elem);
3081 if (
elem->type == XML_TEXT_NODE) {
3082 if (
cur->type == XML_TEXT_NODE) {
3087 xmlNodeSetContent(
cur, tmp);
3092 if ((
cur->prev !=
NULL) && (
cur->prev->type == XML_TEXT_NODE) &&
3093 (
cur->name ==
cur->prev->name)) {
3094 xmlNodeAddContent(
cur->prev,
elem->content);
3098 }
else if (
elem->type == XML_ATTRIBUTE_NODE) {
3099 return xmlAddPropSibling(
cur->prev,
cur,
elem);
3103 xmlSetTreeDoc(
elem,
cur->doc);
3133xmlAddSibling(xmlNodePtr
cur, xmlNodePtr
elem) {
3136 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL)) {
3140 if ((
elem ==
NULL) || (
elem->type == XML_NAMESPACE_DECL)) {
3152 if ((
cur->type != XML_ATTRIBUTE_NODE) && (
cur->parent !=
NULL) &&
3153 (
cur->parent->children !=
NULL) &&
3154 (
cur->parent->last !=
NULL) &&
3155 (
cur->parent->last->next ==
NULL)) {
3161 xmlUnlinkNode(
elem);
3163 if ((
cur->type == XML_TEXT_NODE) && (
elem->type == XML_TEXT_NODE) &&
3165 xmlNodeAddContent(
cur,
elem->content);
3168 }
else if (
elem->type == XML_ATTRIBUTE_NODE) {
3173 xmlSetTreeDoc(
elem,
cur->doc);
3199xmlAddChildList(xmlNodePtr
parent, xmlNodePtr
cur) {
3206 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL)) {
3224 if ((
cur->type == XML_TEXT_NODE) &&
3225 (
parent->last->type == XML_TEXT_NODE) &&
3227 xmlNodeAddContent(
parent->last,
cur->content);
3279xmlAddChild(xmlNodePtr
parent, xmlNodePtr
cur) {
3286 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL)) {
3297 if (
cur->type == XML_TEXT_NODE) {
3298 if ((
parent->type == XML_TEXT_NODE) &&
3301 xmlNodeAddContent(
parent,
cur->content);
3308 xmlNodeAddContent(
parent->last,
cur->content);
3331 if ((
parent->type == XML_TEXT_NODE) &&
3334 xmlNodeAddContent(
parent,
cur->content);
3338 if (
cur->type == XML_ATTRIBUTE_NODE) {
3339 if (
parent->type != XML_ELEMENT_NODE)
3343 xmlAttrPtr lastattr;
3348 lastattr = xmlHasNsProp(
parent,
cur->name,
cur->ns->href);
3349 if ((lastattr !=
NULL) && (lastattr != (xmlAttrPtr)
cur) && (lastattr->type != XML_ATTRIBUTE_DECL)) {
3351 xmlUnlinkNode((xmlNodePtr) lastattr);
3352 xmlFreeProp(lastattr);
3354 if (lastattr == (xmlAttrPtr)
cur)
3362 xmlAttrPtr lastattr =
parent->properties;
3363 while (lastattr->next !=
NULL) {
3364 lastattr = lastattr->next;
3366 lastattr->next = (xmlAttrPtr)
cur;
3367 ((xmlAttrPtr)
cur)->prev = lastattr;
3391xmlGetLastChild(
const xmlNode *
parent) {
3398#ifdef LIBXML_TREE_ENABLED
3416xmlChildElementCount(xmlNodePtr
parent) {
3417 unsigned long ret = 0;
3423 case XML_ELEMENT_NODE:
3424 case XML_ENTITY_NODE:
3425 case XML_DOCUMENT_NODE:
3426 case XML_DOCUMENT_FRAG_NODE:
3427 case XML_HTML_DOCUMENT_NODE:
3434 if (
cur->type == XML_ELEMENT_NODE)
3453xmlFirstElementChild(xmlNodePtr
parent) {
3459 case XML_ELEMENT_NODE:
3460 case XML_ENTITY_NODE:
3461 case XML_DOCUMENT_NODE:
3462 case XML_DOCUMENT_FRAG_NODE:
3463 case XML_HTML_DOCUMENT_NODE:
3470 if (
cur->type == XML_ELEMENT_NODE)
3489xmlLastElementChild(xmlNodePtr
parent) {
3495 case XML_ELEMENT_NODE:
3496 case XML_ENTITY_NODE:
3497 case XML_DOCUMENT_NODE:
3498 case XML_DOCUMENT_FRAG_NODE:
3499 case XML_HTML_DOCUMENT_NODE:
3506 if (
cur->type == XML_ELEMENT_NODE)
3526xmlPreviousElementSibling(xmlNodePtr
node) {
3529 switch (
node->type) {
3530 case XML_ELEMENT_NODE:
3532 case XML_CDATA_SECTION_NODE:
3533 case XML_ENTITY_REF_NODE:
3534 case XML_ENTITY_NODE:
3536 case XML_COMMENT_NODE:
3537 case XML_XINCLUDE_START:
3538 case XML_XINCLUDE_END:
3545 if (
node->type == XML_ELEMENT_NODE)
3565xmlNextElementSibling(xmlNodePtr
node) {
3568 switch (
node->type) {
3569 case XML_ELEMENT_NODE:
3571 case XML_CDATA_SECTION_NODE:
3572 case XML_ENTITY_REF_NODE:
3573 case XML_ENTITY_NODE:
3575 case XML_COMMENT_NODE:
3577 case XML_XINCLUDE_START:
3578 case XML_XINCLUDE_END:
3585 if (
node->type == XML_ELEMENT_NODE)
3602xmlFreeNodeList(xmlNodePtr
cur) {
3609 if (
cur->type == XML_NAMESPACE_DECL) {
3610 xmlFreeNsList((xmlNsPtr)
cur);
3615 while ((
cur->children !=
NULL) &&
3616 (
cur->type != XML_DOCUMENT_NODE) &&
3617 (
cur->type != XML_HTML_DOCUMENT_NODE) &&
3618 (
cur->type != XML_DTD_NODE) &&
3619 (
cur->type != XML_ENTITY_REF_NODE)) {
3626 if ((
cur->type == XML_DOCUMENT_NODE) ||
3627 (
cur->type == XML_HTML_DOCUMENT_NODE)) {
3628 xmlFreeDoc((xmlDocPtr)
cur);
3629 }
else if (
cur->type != XML_DTD_NODE) {
3634 if (((
cur->type == XML_ELEMENT_NODE) ||
3635 (
cur->type == XML_XINCLUDE_START) ||
3636 (
cur->type == XML_XINCLUDE_END)) &&
3638 xmlFreePropList(
cur->properties);
3639 if ((
cur->type != XML_ELEMENT_NODE) &&
3640 (
cur->type != XML_XINCLUDE_START) &&
3641 (
cur->type != XML_XINCLUDE_END) &&
3642 (
cur->type != XML_ENTITY_REF_NODE) &&
3646 if (((
cur->type == XML_ELEMENT_NODE) ||
3647 (
cur->type == XML_XINCLUDE_START) ||
3648 (
cur->type == XML_XINCLUDE_END)) &&
3650 xmlFreeNsList(
cur->nsDef);
3659 (
cur->type != XML_TEXT_NODE) &&
3660 (
cur->type != XML_COMMENT_NODE))
3685xmlFreeNode(xmlNodePtr
cur) {
3691 if (
cur->type == XML_DTD_NODE) {
3692 xmlFreeDtd((xmlDtdPtr)
cur);
3695 if (
cur->type == XML_NAMESPACE_DECL) {
3696 xmlFreeNs((xmlNsPtr)
cur);
3699 if (
cur->type == XML_ATTRIBUTE_NODE) {
3700 xmlFreeProp((xmlAttrPtr)
cur);
3709 if (
cur->type == XML_ENTITY_DECL) {
3710 xmlEntityPtr ent = (xmlEntityPtr)
cur;
3714 if ((
cur->children !=
NULL) &&
3715 (
cur->type != XML_ENTITY_REF_NODE))
3716 xmlFreeNodeList(
cur->children);
3718 if ((
cur->type == XML_ELEMENT_NODE) ||
3719 (
cur->type == XML_XINCLUDE_START) ||
3720 (
cur->type == XML_XINCLUDE_END)) {
3722 xmlFreePropList(
cur->properties);
3724 xmlFreeNsList(
cur->nsDef);
3725 }
else if ((
cur->content !=
NULL) &&
3726 (
cur->type != XML_ENTITY_REF_NODE) &&
3737 (
cur->type != XML_TEXT_NODE) &&
3738 (
cur->type != XML_COMMENT_NODE))
3755xmlUnlinkNode(xmlNodePtr
cur) {
3759 if (
cur->type == XML_NAMESPACE_DECL)
3761 if (
cur->type == XML_DTD_NODE) {
3765 if (doc->intSubset == (xmlDtdPtr)
cur)
3766 doc->intSubset =
NULL;
3767 if (doc->extSubset == (xmlDtdPtr)
cur)
3768 doc->extSubset =
NULL;
3771 if (
cur->type == XML_ENTITY_DECL) {
3775 if (doc->intSubset !=
NULL) {
3783 if (doc->extSubset !=
NULL) {
3796 if (
cur->type == XML_ATTRIBUTE_NODE) {
3797 if (
parent->properties == (xmlAttrPtr)
cur)
3798 parent->properties = ((xmlAttrPtr)
cur)->next;
3808 cur->next->prev =
cur->prev;
3810 cur->prev->next =
cur->next;
3814#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
3829xmlReplaceNode(xmlNodePtr old, xmlNodePtr
cur) {
3831 if ((old ==
NULL) || (old->type == XML_NAMESPACE_DECL) ||
3832 (old->parent ==
NULL)) {
3835 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL)) {
3842 if ((old->type==XML_ATTRIBUTE_NODE) && (
cur->type!=XML_ATTRIBUTE_NODE)) {
3845 if ((
cur->type==XML_ATTRIBUTE_NODE) && (old->type!=XML_ATTRIBUTE_NODE)) {
3849 xmlSetTreeDoc(
cur, old->doc);
3850 cur->parent = old->parent;
3851 cur->next = old->next;
3854 cur->prev = old->prev;
3858 if (
cur->type == XML_ATTRIBUTE_NODE) {
3859 if (
cur->parent->properties == (xmlAttrPtr)old)
3860 cur->parent->properties = ((xmlAttrPtr)
cur);
3862 if (
cur->parent->children == old)
3863 cur->parent->children =
cur;
3864 if (
cur->parent->last == old)
3868 old->next = old->prev =
NULL;
3889xmlCopyNamespace(xmlNsPtr
cur) {
3893 switch (
cur->type) {
3894 case XML_LOCAL_NAMESPACE:
3912xmlCopyNamespaceList(xmlNsPtr
cur) {
3917 q = xmlCopyNamespace(
cur);
3934xmlCopyPropInternal(xmlDocPtr doc, xmlNodePtr
target, xmlAttrPtr
cur) {
3942 else if (doc !=
NULL)
3946 else if (
cur->children !=
NULL)
3963 ns = xmlSearchNs(
cur->doc,
cur->parent,
cur->ns->prefix);
3966 xmlNodePtr pred =
NULL;
4004 tmp =
ret->children;
4005 while (tmp !=
NULL) {
4007 if (tmp->next ==
NULL)
4021 id = xmlNodeListGetString(
cur->doc,
cur->children, 1);
4041xmlCopyProp(xmlNodePtr
target, xmlAttrPtr
cur) {
4055xmlCopyPropList(xmlNodePtr
target, xmlAttrPtr
cur) {
4064 xmlFreePropList(
ret);
4104 switch (
node->type) {
4106 case XML_CDATA_SECTION_NODE:
4107 case XML_ELEMENT_NODE:
4108 case XML_DOCUMENT_FRAG_NODE:
4109 case XML_ENTITY_REF_NODE:
4110 case XML_ENTITY_NODE:
4112 case XML_COMMENT_NODE:
4113 case XML_XINCLUDE_START:
4114 case XML_XINCLUDE_END:
4116 case XML_ATTRIBUTE_NODE:
4117 return((xmlNodePtr) xmlCopyPropInternal(doc,
parent, (xmlAttrPtr)
node));
4118 case XML_NAMESPACE_DECL:
4119 return((xmlNodePtr) xmlCopyNamespaceList((xmlNsPtr)
node));
4121 case XML_DOCUMENT_NODE:
4122 case XML_HTML_DOCUMENT_NODE:
4123#ifdef LIBXML_TREE_ENABLED
4124 return((xmlNodePtr) xmlCopyDoc((xmlDocPtr)
node, extended));
4126 case XML_DOCUMENT_TYPE_NODE:
4127 case XML_NOTATION_NODE:
4129 case XML_ELEMENT_DECL:
4130 case XML_ATTRIBUTE_DECL:
4131 case XML_ENTITY_DECL:
4155 if ((doc !=
NULL) && (doc->dict !=
NULL))
4160 if ((
node->type != XML_ELEMENT_NODE) &&
4162 (
node->type != XML_ENTITY_REF_NODE) &&
4163 (
node->type != XML_XINCLUDE_END) &&
4164 (
node->type != XML_XINCLUDE_START)) {
4167 if (
node->type == XML_ELEMENT_NODE)
4197 if (((
node->type == XML_ELEMENT_NODE) ||
4198 (
node->type == XML_XINCLUDE_START)) && (
node->nsDef !=
NULL))
4199 ret->nsDef = xmlCopyNamespaceList(
node->nsDef);
4204 ns = xmlSearchNs(doc,
ret,
node->ns->prefix);
4230 if (((
node->type == XML_ELEMENT_NODE) ||
4231 (
node->type == XML_XINCLUDE_START)) && (
node->properties !=
NULL))
4232 ret->properties = xmlCopyPropList(
ret,
node->properties);
4233 if (
node->type == XML_ENTITY_REF_NODE) {
4234 if ((doc ==
NULL) || (
node->doc != doc)) {
4243 ret->children =
node->children;
4245 ret->last =
ret->children;
4246 }
else if ((
node->children !=
NULL) && (extended != 2)) {
4247 xmlNodePtr
cur, insert;
4259 if (insert->last !=
copy) {
4260 if (insert->last ==
NULL) {
4261 insert->children =
copy;
4263 copy->prev = insert->last;
4264 insert->last->next =
copy;
4266 insert->last =
copy;
4269 if ((
cur->type != XML_ENTITY_REF_NODE) &&
4283 insert = insert->parent;
4304 xmlDtdPtr newSubset =
NULL;
4305 int linkedSubset = 0;
4308#ifdef LIBXML_TREE_ENABLED
4309 if (
node->type == XML_DTD_NODE ) {
4314 if ((doc->intSubset ==
NULL) && (newSubset ==
NULL)) {
4315 q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr)
node );
4319 newSubset = (xmlDtdPtr)
q;
4323 q = (xmlNodePtr) doc->intSubset;
4333 }
else if (
p !=
q) {
4341 if ((doc !=
NULL) && (newSubset !=
NULL))
4342 doc->intSubset = newSubset;
4345 if (linkedSubset != 0)
4346 xmlUnlinkNode((xmlNodePtr) doc->intSubset);
4347 xmlFreeNodeList(
ret);
4363xmlCopyNode(xmlNodePtr
node,
int extended) {
4383xmlDocCopyNode(xmlNodePtr
node, xmlDocPtr doc,
int extended) {
4399xmlNodePtr xmlDocCopyNodeList(xmlDocPtr doc, xmlNodePtr
node) {
4413xmlNodePtr xmlCopyNodeList(xmlNodePtr
node) {
4418#if defined(LIBXML_TREE_ENABLED)
4428xmlCopyDtd(xmlDtdPtr dtd) {
4433 ret = xmlNewDtd(
NULL, dtd->
name, dtd->ExternalID, dtd->SystemID);
4435 if (dtd->entities !=
NULL)
4436 ret->entities = (
void *) xmlCopyEntitiesTable(
4438 if (dtd->notations !=
NULL)
4439 ret->notations = (
void *) xmlCopyNotationTable(
4441 if (dtd->elements !=
NULL)
4442 ret->elements = (
void *) xmlCopyElementTable(
4444 if (dtd->attributes !=
NULL)
4445 ret->attributes = (
void *) xmlCopyAttributeTable(
4447 if (dtd->pentities !=
NULL)
4448 ret->pentities = (
void *) xmlCopyEntitiesTable(
4451 cur = dtd->children;
4455 if (
cur->type == XML_ENTITY_DECL) {
4456 xmlEntityPtr tmp = (xmlEntityPtr)
cur;
4457 switch (tmp->etype) {
4461 q = (xmlNodePtr) xmlGetEntityFromDtd(
ret, tmp->name);
4466 xmlGetParameterEntityFromDtd(
ret, tmp->name);
4471 }
else if (
cur->type == XML_ELEMENT_DECL) {
4472 xmlElementPtr tmp = (xmlElementPtr)
cur;
4475 }
else if (
cur->type == XML_ATTRIBUTE_DECL) {
4476 xmlAttributePtr tmp = (xmlAttributePtr)
cur;
4479 }
else if (
cur->type == XML_COMMENT_NODE) {
4480 q = xmlCopyNode(
cur, 0);
4494 q->parent = (xmlNodePtr)
ret;
4505#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
4517xmlCopyDoc(xmlDocPtr doc,
int recursive) {
4521 ret = xmlNewDoc(doc->version);
4523 ret->type = doc->type;
4524 if (doc->name !=
NULL)
4526 if (doc->encoding !=
NULL)
4528 if (doc->URL !=
NULL)
4530 ret->charset = doc->charset;
4531 ret->compression = doc->compression;
4532 ret->standalone = doc->standalone;
4533 if (!recursive)
return(
ret);
4537#ifdef LIBXML_TREE_ENABLED
4538 if (doc->intSubset !=
NULL) {
4539 ret->intSubset = xmlCopyDtd(doc->intSubset);
4544 xmlSetTreeDoc((xmlNodePtr)
ret->intSubset,
ret);
4545 ret->intSubset->parent =
ret;
4548 if (doc->oldNs !=
NULL)
4549 ret->oldNs = xmlCopyNamespaceList(doc->oldNs);
4550 if (doc->children !=
NULL) {
4556 tmp =
ret->children;
4557 while (tmp !=
NULL) {
4558 if (tmp->next ==
NULL)
4584xmlGetLineNoInternal(
const xmlNode *
node,
int depth)
4593 if ((
node->type == XML_ELEMENT_NODE) ||
4594 (
node->type == XML_TEXT_NODE) ||
4595 (
node->type == XML_COMMENT_NODE) ||
4596 (
node->type == XML_PI_NODE)) {
4597 if (
node->line == 65535) {
4598 if ((
node->type == XML_TEXT_NODE) && (
node->psvi !=
NULL))
4600 else if ((
node->type == XML_ELEMENT_NODE) &&
4611 ((
node->prev->type == XML_ELEMENT_NODE) ||
4612 (
node->prev->type == XML_TEXT_NODE) ||
4613 (
node->prev->type == XML_COMMENT_NODE) ||
4614 (
node->prev->type == XML_PI_NODE)))
4617 (
node->parent->type == XML_ELEMENT_NODE))
4634xmlGetLineNo(
const xmlNode *
node)
4636 return(xmlGetLineNoInternal(
node, 0));
4639#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
4650xmlGetNodePath(
const xmlNode *
node)
4652 const xmlNode *
cur, *tmp, *
next;
4659 int occur = 0,
generic;
4661 if ((
node ==
NULL) || (
node->type == XML_NAMESPACE_DECL))
4683 if ((
cur->type == XML_DOCUMENT_NODE) ||
4684 (
cur->type == XML_HTML_DOCUMENT_NODE)) {
4689 }
else if (
cur->type == XML_ELEMENT_NODE) {
4692 name = (
const char *)
cur->name;
4694 if (
cur->ns->prefix !=
NULL) {
4695 snprintf(nametemp,
sizeof(nametemp) - 1,
"%s:%s",
4696 (
char *)
cur->ns->prefix, (
char *)
cur->name);
4697 nametemp[
sizeof(nametemp) - 1] = 0;
4715 while (tmp !=
NULL) {
4716 if ((tmp->type == XML_ELEMENT_NODE) &&
4719 ((tmp->ns ==
cur->ns) ||
4727 while (tmp !=
NULL && occur == 0) {
4728 if ((tmp->type == XML_ELEMENT_NODE) &&
4731 ((tmp->ns ==
cur->ns) ||
4741 }
else if (
cur->type == XML_COMMENT_NODE) {
4750 while (tmp !=
NULL) {
4751 if (tmp->type == XML_COMMENT_NODE)
4757 while (tmp !=
NULL && occur == 0) {
4758 if (tmp->type == XML_COMMENT_NODE)
4766 }
else if ((
cur->type == XML_TEXT_NODE) ||
4767 (
cur->type == XML_CDATA_SECTION_NODE)) {
4776 while (tmp !=
NULL) {
4777 if ((tmp->type == XML_TEXT_NODE) ||
4778 (tmp->type == XML_CDATA_SECTION_NODE))
4788 while (tmp !=
NULL) {
4789 if ((tmp->type == XML_TEXT_NODE) ||
4790 (tmp->type == XML_CDATA_SECTION_NODE))
4799 }
else if (
cur->type == XML_PI_NODE) {
4801 snprintf(nametemp,
sizeof(nametemp) - 1,
4802 "processing-instruction('%s')", (
char *)
cur->name);
4803 nametemp[
sizeof(nametemp) - 1] = 0;
4812 while (tmp !=
NULL) {
4813 if ((tmp->type == XML_PI_NODE) &&
4820 while (tmp !=
NULL && occur == 0) {
4821 if ((tmp->type == XML_PI_NODE) &&
4831 }
else if (
cur->type == XML_ATTRIBUTE_NODE) {
4836 snprintf(nametemp,
sizeof(nametemp) - 1,
"%s:%s",
4837 (
char *)
cur->ns->prefix, (
char *)
cur->name);
4839 snprintf(nametemp,
sizeof(nametemp) - 1,
"%s",
4841 nametemp[
sizeof(nametemp) - 1] = 0;
4844 next = ((xmlAttrPtr)
cur)->parent;
4898xmlDocGetRootElement(
const xmlDoc *doc) {
4902 ret = doc->children;
4904 if (
ret->type == XML_ELEMENT_NODE)
4911#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
4924xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr
root) {
4925 xmlNodePtr old =
NULL;
4928 if ((
root ==
NULL) || (
root->type == XML_NAMESPACE_DECL))
4930 xmlUnlinkNode(
root);
4931 xmlSetTreeDoc(
root, doc);
4933 old = doc->children;
4934 while (old !=
NULL) {
4935 if (old->type == XML_ELEMENT_NODE)
4940 if (doc->children ==
NULL) {
4941 doc->children =
root;
4944 xmlAddSibling(doc->children,
root);
4947 xmlReplaceNode(old,
root);
4953#if defined(LIBXML_TREE_ENABLED)
4969 case XML_CDATA_SECTION_NODE:
4970 case XML_COMMENT_NODE:
4971 case XML_DOCUMENT_NODE:
4972 case XML_DOCUMENT_TYPE_NODE:
4973 case XML_DOCUMENT_FRAG_NODE:
4974 case XML_NOTATION_NODE:
4975 case XML_HTML_DOCUMENT_NODE:
4977 case XML_ELEMENT_DECL:
4978 case XML_ATTRIBUTE_DECL:
4979 case XML_ENTITY_DECL:
4981 case XML_ENTITY_REF_NODE:
4982 case XML_ENTITY_NODE:
4983 case XML_NAMESPACE_DECL:
4984 case XML_XINCLUDE_START:
4985 case XML_XINCLUDE_END:
4987 case XML_ELEMENT_NODE:
4988 case XML_ATTRIBUTE_NODE:
4991 ns = xmlSearchNsByHref(
cur->doc,
cur, XML_XML_NAMESPACE);
5009xmlNodeGetLang(
const xmlNode *
cur) {
5012 if ((
cur ==
NULL) || (
cur->type == XML_NAMESPACE_DECL))
5024#ifdef LIBXML_TREE_ENABLED
5034xmlNodeSetSpacePreserve(xmlNodePtr
cur,
int val) {
5040 case XML_CDATA_SECTION_NODE:
5041 case XML_COMMENT_NODE:
5042 case XML_DOCUMENT_NODE:
5043 case XML_DOCUMENT_TYPE_NODE:
5044 case XML_DOCUMENT_FRAG_NODE:
5045 case XML_NOTATION_NODE:
5046 case XML_HTML_DOCUMENT_NODE:
5048 case XML_ELEMENT_DECL:
5049 case XML_ATTRIBUTE_DECL:
5050 case XML_ENTITY_DECL:
5052 case XML_ENTITY_REF_NODE:
5053 case XML_ENTITY_NODE:
5054 case XML_NAMESPACE_DECL:
5055 case XML_XINCLUDE_START:
5056 case XML_XINCLUDE_END:
5058 case XML_ELEMENT_NODE:
5059 case XML_ATTRIBUTE_NODE:
5062 ns = xmlSearchNsByHref(
cur->doc,
cur, XML_XML_NAMESPACE);
5087xmlNodeGetSpacePreserve(
const xmlNode *
cur) {
5090 if ((
cur ==
NULL) || (
cur->type != XML_ELEMENT_NODE))
5110#ifdef LIBXML_TREE_ENABLED
5128 case XML_CDATA_SECTION_NODE:
5129 case XML_COMMENT_NODE:
5130 case XML_DOCUMENT_TYPE_NODE:
5131 case XML_DOCUMENT_FRAG_NODE:
5132 case XML_NOTATION_NODE:
5133 case XML_HTML_DOCUMENT_NODE:
5134 case XML_NAMESPACE_DECL:
5135 case XML_XINCLUDE_START:
5136 case XML_XINCLUDE_END:
5138 case XML_ELEMENT_NODE:
5139 case XML_ATTRIBUTE_NODE:
5141 case XML_ENTITY_REF_NODE:
5142 case XML_ENTITY_NODE:
5144 case XML_DOCUMENT_NODE:
5145 case XML_ELEMENT_DECL:
5146 case XML_ATTRIBUTE_DECL:
5147 case XML_ENTITY_DECL:
5170#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
5187 case XML_CDATA_SECTION_NODE:
5188 case XML_COMMENT_NODE:
5189 case XML_DOCUMENT_TYPE_NODE:
5190 case XML_DOCUMENT_FRAG_NODE:
5191 case XML_NOTATION_NODE:
5193 case XML_ELEMENT_DECL:
5194 case XML_ATTRIBUTE_DECL:
5195 case XML_ENTITY_DECL:
5197 case XML_ENTITY_REF_NODE:
5198 case XML_ENTITY_NODE:
5199 case XML_NAMESPACE_DECL:
5200 case XML_XINCLUDE_START:
5201 case XML_XINCLUDE_END:
5203 case XML_ELEMENT_NODE:
5204 case XML_ATTRIBUTE_NODE:
5206 case XML_DOCUMENT_NODE:
5207 case XML_HTML_DOCUMENT_NODE: {
5208 xmlDocPtr doc = (xmlDocPtr)
cur;
5210 if (doc->URL !=
NULL)
5220 ns = xmlSearchNsByHref(
cur->doc,
cur, XML_XML_NAMESPACE);
5251xmlNodeGetBase(
const xmlDoc *doc,
const xmlNode *
cur) {
5257 if ((
cur !=
NULL) && (
cur->type == XML_NAMESPACE_DECL))
5259 if (doc ==
NULL) doc =
cur->doc;
5260 if ((doc !=
NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
5261 cur = doc->children;
5263 if (
cur->type != XML_ELEMENT_NODE) {
5283 if (
cur->type == XML_ENTITY_DECL) {
5284 xmlEntityPtr ent = (xmlEntityPtr)
cur;
5287 if (
cur->type == XML_ELEMENT_NODE) {
5290 if (oldbase !=
NULL) {
5292 if (newbase !=
NULL) {
5312 if ((doc !=
NULL) && (doc->URL !=
NULL)) {
5313 if (oldbase ==
NULL)
5336xmlNodeBufGetContent(xmlBufferPtr
buffer,
const xmlNode *
cur)
5364xmlBufGetNodeContent(xmlBufPtr
buf,
const xmlNode *
cur)
5367 switch (
cur->type) {
5368 case XML_CDATA_SECTION_NODE:
5372 case XML_DOCUMENT_FRAG_NODE:
5373 case XML_ELEMENT_NODE:{
5374 const xmlNode *tmp =
cur;
5376 while (tmp !=
NULL) {
5377 switch (tmp->type) {
5378 case XML_CDATA_SECTION_NODE:
5380 if (tmp->content !=
NULL)
5383 case XML_ENTITY_REF_NODE:
5384 xmlBufGetNodeContent(
buf, tmp);
5392 if (tmp->children !=
NULL) {
5393 if (tmp->children->type != XML_ENTITY_DECL) {
5394 tmp = tmp->children;
5401 if (tmp->next !=
NULL) {
5414 if (tmp->next !=
NULL) {
5418 }
while (tmp !=
NULL);
5422 case XML_ATTRIBUTE_NODE:{
5423 xmlAttrPtr
attr = (xmlAttrPtr)
cur;
5424 xmlNodePtr tmp =
attr->children;
5426 while (tmp !=
NULL) {
5427 if (tmp->type == XML_TEXT_NODE)
5430 xmlBufGetNodeContent(
buf, tmp);
5435 case XML_COMMENT_NODE:
5439 case XML_ENTITY_REF_NODE:{
5453 tmp = ent->children;
5455 xmlBufGetNodeContent(
buf, tmp);
5460 case XML_ENTITY_NODE:
5461 case XML_DOCUMENT_TYPE_NODE:
5462 case XML_NOTATION_NODE:
5464 case XML_XINCLUDE_START:
5465 case XML_XINCLUDE_END:
5467 case XML_DOCUMENT_NODE:
5468 case XML_HTML_DOCUMENT_NODE:
5471 if ((
cur->type == XML_ELEMENT_NODE) ||
5472 (
cur->type == XML_TEXT_NODE) ||
5473 (
cur->type == XML_CDATA_SECTION_NODE)) {
5474 xmlBufGetNodeContent(
buf,
cur);
5479 case XML_NAMESPACE_DECL:
5482 case XML_ELEMENT_DECL:
5483 case XML_ATTRIBUTE_DECL:
5484 case XML_ENTITY_DECL:
5502xmlNodeGetContent(
const xmlNode *
cur)
5506 switch (
cur->type) {
5507 case XML_DOCUMENT_FRAG_NODE:
5508 case XML_ELEMENT_NODE:{
5516 xmlBufGetNodeContent(
buf,
cur);
5521 case XML_ATTRIBUTE_NODE:
5523 case XML_COMMENT_NODE:
5528 case XML_ENTITY_REF_NODE:{
5543 xmlBufGetNodeContent(
buf,
cur);
5549 case XML_ENTITY_NODE:
5550 case XML_DOCUMENT_TYPE_NODE:
5551 case XML_NOTATION_NODE:
5553 case XML_XINCLUDE_START:
5554 case XML_XINCLUDE_END:
5556 case XML_DOCUMENT_NODE:
5557 case XML_HTML_DOCUMENT_NODE: {
5566 xmlBufGetNodeContent(
buf, (xmlNodePtr)
cur);
5572 case XML_NAMESPACE_DECL: {
5578 case XML_ELEMENT_DECL:
5581 case XML_ATTRIBUTE_DECL:
5584 case XML_ENTITY_DECL:
5587 case XML_CDATA_SECTION_NODE:
5611 switch (
cur->type) {
5612 case XML_DOCUMENT_FRAG_NODE:
5613 case XML_ELEMENT_NODE:
5614 case XML_ATTRIBUTE_NODE:
5615 if (
cur->children !=
NULL) xmlFreeNodeList(
cur->children);
5620 case XML_CDATA_SECTION_NODE:
5621 case XML_ENTITY_REF_NODE:
5622 case XML_ENTITY_NODE:
5624 case XML_COMMENT_NODE:
5631 if (
cur->children !=
NULL) xmlFreeNodeList(
cur->children);
5639 case XML_DOCUMENT_NODE:
5640 case XML_HTML_DOCUMENT_NODE:
5641 case XML_DOCUMENT_TYPE_NODE:
5642 case XML_XINCLUDE_START:
5643 case XML_XINCLUDE_END:
5645 case XML_NOTATION_NODE:
5649 case XML_NAMESPACE_DECL:
5651 case XML_ELEMENT_DECL:
5654 case XML_ATTRIBUTE_DECL:
5657 case XML_ENTITY_DECL:
5663#ifdef LIBXML_TREE_ENABLED
5680 switch (
cur->type) {
5681 case XML_DOCUMENT_FRAG_NODE:
5682 case XML_ELEMENT_NODE:
5683 case XML_ATTRIBUTE_NODE:
5684 if (
cur->children !=
NULL) xmlFreeNodeList(
cur->children);
5689 case XML_CDATA_SECTION_NODE:
5690 case XML_ENTITY_REF_NODE:
5691 case XML_ENTITY_NODE:
5693 case XML_COMMENT_NODE:
5694 case XML_NOTATION_NODE:
5701 if (
cur->children !=
NULL) xmlFreeNodeList(
cur->children);
5709 case XML_DOCUMENT_NODE:
5711 case XML_HTML_DOCUMENT_NODE:
5712 case XML_DOCUMENT_TYPE_NODE:
5713 case XML_NAMESPACE_DECL:
5714 case XML_XINCLUDE_START:
5715 case XML_XINCLUDE_END:
5717 case XML_ELEMENT_DECL:
5720 case XML_ATTRIBUTE_DECL:
5723 case XML_ENTITY_DECL:
5746 if (
len <= 0)
return;
5747 switch (
cur->type) {
5748 case XML_DOCUMENT_FRAG_NODE:
5749 case XML_ELEMENT_NODE: {
5750 xmlNodePtr
last, newNode, tmp;
5754 if (newNode !=
NULL) {
5755 tmp = xmlAddChild(
cur, newNode);
5759 xmlTextMerge(
last, newNode);
5764 case XML_ATTRIBUTE_NODE:
5767 case XML_CDATA_SECTION_NODE:
5768 case XML_ENTITY_REF_NODE:
5769 case XML_ENTITY_NODE:
5771 case XML_COMMENT_NODE:
5772 case XML_NOTATION_NODE:
5784 case XML_DOCUMENT_NODE:
5786 case XML_HTML_DOCUMENT_NODE:
5787 case XML_DOCUMENT_TYPE_NODE:
5788 case XML_NAMESPACE_DECL:
5789 case XML_XINCLUDE_START:
5790 case XML_XINCLUDE_END:
5792 case XML_ELEMENT_DECL:
5793 case XML_ATTRIBUTE_DECL:
5794 case XML_ENTITY_DECL:
5830xmlTextMerge(xmlNodePtr
first, xmlNodePtr second) {
5833 if (
first->type != XML_TEXT_NODE)
return(
first);
5834 if (second->type != XML_TEXT_NODE)
return(
first);
5835 if (second->name !=
first->name)
5837 xmlNodeAddContent(
first, second->content);
5838 xmlUnlinkNode(second);
5839 xmlFreeNode(second);
5843#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
5863 if ((
node ==
NULL) || (
node->type == XML_NAMESPACE_DECL))
5867 if (
node->type == XML_ELEMENT_NODE) {
5870 for (
i = 0;
i < nbns;
i++) {
5871 if ((
cur->prefix ==
ret[
i]->prefix) ||
5876 if (nbns >= maxns) {
5879 maxns = maxns ? maxns * 2 : 10;
5912xmlTreeEnsureXMLDecl(xmlDocPtr doc)
5916 if (doc->oldNs !=
NULL)
5917 return (doc->oldNs);
5923 "allocating the XML namespace");
5927 ns->type = XML_LOCAL_NAMESPACE;
5952xmlSearchNs(xmlDocPtr doc, xmlNodePtr
node,
const xmlChar *nameSpace) {
5955 const xmlNode *orig =
node;
5958 if ((nameSpace !=
NULL) &&
5960 if ((doc ==
NULL) && (
node->type == XML_ELEMENT_NODE)) {
5972 cur->type = XML_LOCAL_NAMESPACE;
5987 if (doc->oldNs ==
NULL)
5988 return(xmlTreeEnsureXMLDecl(doc));
5993 if ((
node->type == XML_ENTITY_REF_NODE) ||
5994 (
node->type == XML_ENTITY_NODE) ||
5995 (
node->type == XML_ENTITY_DECL))
5997 if (
node->type == XML_ELEMENT_NODE) {
6000 if ((
cur->prefix ==
NULL) && (nameSpace ==
NULL) &&
6003 if ((
cur->prefix !=
NULL) && (nameSpace !=
NULL) &&
6012 if ((
cur->prefix ==
NULL) && (nameSpace ==
NULL) &&
6015 if ((
cur->prefix !=
NULL) && (nameSpace !=
NULL) &&
6046 if ((
node->type == XML_ENTITY_REF_NODE) ||
6047 (
node->type == XML_ENTITY_NODE) ||
6048 (
node->type == XML_ENTITY_DECL))
6050 if (
node->type == XML_ELEMENT_NODE) {
6052 while (tst !=
NULL) {
6053 if ((tst->prefix ==
NULL)
6056 if ((tst->prefix !=
NULL)
6065 if (
node != ancestor)
6081xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr
node,
const xmlChar * href)
6084 xmlNodePtr orig =
node;
6087 if ((
node ==
NULL) || (
node->type == XML_NAMESPACE_DECL) || (href ==
NULL))
6093 if ((doc ==
NULL) && (
node->type == XML_ELEMENT_NODE)) {
6105 cur->type = XML_LOCAL_NAMESPACE;
6120 if (doc->oldNs ==
NULL)
6121 return(xmlTreeEnsureXMLDecl(doc));
6127 if ((
node->type == XML_ENTITY_REF_NODE) ||
6128 (
node->type == XML_ENTITY_NODE) ||
6129 (
node->type == XML_ENTITY_DECL))
6131 if (
node->type == XML_ELEMENT_NODE) {
6137 (xmlNsInScope(doc, orig,
node,
cur->prefix) == 1))
6148 (xmlNsInScope(doc, orig,
node,
cur->prefix) == 1))
6178 if ((
tree ==
NULL) || (
tree->type != XML_ELEMENT_NODE)) {
6181 if ((
ns ==
NULL) || (
ns->type != XML_NAMESPACE_DECL)) {
6187 def = xmlSearchNsByHref(doc,
tree,
ns->href);
6201 while (def !=
NULL) {
6218#ifdef LIBXML_TREE_ENABLED
6234xmlReconciliateNs(xmlDocPtr doc, xmlNodePtr
tree) {
6235 xmlNsPtr *oldNs =
NULL;
6236 xmlNsPtr *newNs =
NULL;
6245 if ((
node ==
NULL) || (
node->type != XML_ELEMENT_NODE))
return(-1);
6246 if ((doc ==
NULL) || (doc->type != XML_DOCUMENT_NODE))
return(-1);
6247 if (
node->doc != doc)
return(-1);
6256 if (sizeCache == 0) {
6258 oldNs = (xmlNsPtr *)
xmlMalloc(sizeCache *
6260 if (oldNs ==
NULL) {
6264 newNs = (xmlNsPtr *)
xmlMalloc(sizeCache *
6266 if (newNs ==
NULL) {
6272 for (
i = 0;
i < nbCache;
i++) {
6273 if (oldNs[
i] ==
node->ns) {
6274 node->ns = newNs[
i];
6287 if (sizeCache <= nbCache) {
6289 oldNs = (xmlNsPtr *)
xmlRealloc(oldNs, sizeCache *
6291 if (oldNs ==
NULL) {
6296 newNs = (xmlNsPtr *)
xmlRealloc(newNs, sizeCache *
6298 if (newNs ==
NULL) {
6305 oldNs[nbCache++] =
node->ns;
6313 if (
node->type == XML_ELEMENT_NODE) {
6320 if (sizeCache == 0) {
6322 oldNs = (xmlNsPtr *)
xmlMalloc(sizeCache *
6324 if (oldNs ==
NULL) {
6328 newNs = (xmlNsPtr *)
xmlMalloc(sizeCache *
6330 if (newNs ==
NULL) {
6336 for (
i = 0;
i < nbCache;
i++) {
6337 if (oldNs[
i] ==
attr->ns) {
6338 attr->ns = newNs[
i];
6351 if (sizeCache <= nbCache) {
6354 sizeCache *
sizeof(xmlNsPtr));
6355 if (oldNs ==
NULL) {
6361 sizeCache *
sizeof(xmlNsPtr));
6362 if (newNs ==
NULL) {
6369 oldNs[nbCache++] =
attr->ns;
6381 if ((
node->children !=
NULL) && (
node->type != XML_ENTITY_REF_NODE)) {
6417 const xmlChar *nsName,
int useDTD)
6428 prop =
node->properties;
6429 if (nsName ==
NULL) {
6438 }
while (prop !=
NULL);
6445 ((prop->ns->href == nsName) ||
6451 }
while (prop !=
NULL);
6455#ifdef LIBXML_TREE_ENABLED
6463 xmlDocPtr doc =
node->doc;
6464 xmlAttributePtr attrDecl =
NULL;
6485 if ((attrDecl ==
NULL) && (doc->extSubset !=
NULL)) {
6489 }
else if (
xmlStrEqual(nsName, XML_XML_NAMESPACE)) {
6495 if ((attrDecl ==
NULL) && (doc->extSubset !=
NULL)) {
6500 xmlNsPtr *nsList, *
cur;
6506 nsList = xmlGetNsList(
node->doc,
node);
6507 if (nsList ==
NULL) {
6516 name, (*cur)->prefix);
6519 if (doc->extSubset !=
NULL) {
6521 name, (*cur)->prefix);
6535 if ((attrDecl !=
NULL) && (attrDecl->defaultValue !=
NULL))
6536 return((xmlAttrPtr) attrDecl);
6547 if (prop->type == XML_ATTRIBUTE_NODE) {
6552 if (prop->children !=
NULL) {
6553 if ((prop->children->next ==
NULL) &&
6554 ((prop->children->type == XML_TEXT_NODE) ||
6555 (prop->children->type == XML_CDATA_SECTION_NODE)))
6560 return(
xmlStrdup(prop->children->content));
6564 ret = xmlNodeListGetString(prop->doc, prop->children, 1);
6570 }
else if (prop->type == XML_ATTRIBUTE_DECL) {
6571 return(
xmlStrdup(((xmlAttributePtr)prop)->defaultValue));
6598 prop =
node->properties;
6599 while (prop !=
NULL) {
6605 if (!xmlCheckDTD)
return(
NULL);
6613 xmlAttributePtr attrDecl;
6614 if (doc->intSubset !=
NULL) {
6616 if ((attrDecl ==
NULL) && (doc->extSubset !=
NULL))
6618 if ((attrDecl !=
NULL) && (attrDecl->defaultValue !=
NULL))
6621 return((xmlAttrPtr) attrDecl);
6646 return(xmlGetPropNodeInternal(
node,
name, nameSpace, xmlCheckDTD));
6694 prop = xmlGetPropNodeInternal(
node,
name,
NULL, xmlCheckDTD);
6719 prop = xmlGetPropNodeInternal(
node,
name, nameSpace, xmlCheckDTD);
6725#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
6742 xmlUnlinkNode((xmlNodePtr) prop);
6763 xmlUnlinkNode((xmlNodePtr) prop);
6769#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
6795 nqname = xmlSplitQName3(
name, &
len);
6796 if (nqname !=
NULL) {
6833 if (prop->atype == XML_ATTRIBUTE_ID) {
6835 prop->atype = XML_ATTRIBUTE_ID;
6837 if (prop->children !=
NULL)
6838 xmlFreeNodeList(prop->children);
6839 prop->children =
NULL;
6845 prop->children = xmlNewDocText(
node->doc,
value);
6847 tmp = prop->children;
6848 while (tmp !=
NULL) {
6849 tmp->parent = (xmlNodePtr) prop;
6850 if (tmp->next ==
NULL)
6855 if (prop->atype == XML_ATTRIBUTE_ID)
6875xmlNodeIsText(
const xmlNode *
node) {
6878 if (
node->type == XML_TEXT_NODE)
return(1);
6892xmlIsBlankNode(
const xmlNode *
node) {
6896 if ((
node->type != XML_TEXT_NODE) &&
6897 (
node->type != XML_CDATA_SECTION_NODE))
6899 if (
node->content ==
NULL)
return(1);
6924 if ((
node->type != XML_TEXT_NODE) &&
6925 (
node->type != XML_CDATA_SECTION_NODE) &&
6926 (
node->type != XML_COMMENT_NODE) &&
6927 (
node->type != XML_PI_NODE)) {
6957xmlBufferCreate(
void) {
6974 ret->content[0] = 0;
6987xmlBufferCreateSize(
size_t size) {
7007 ret->content[0] = 0;
7025xmlBufferDetach(xmlBufferPtr
buf) {
7048xmlBufferCreateStatic(
void *
mem,
size_t size) {
7049 xmlBufferPtr
buf = xmlBufferCreateSize(
size);
7063xmlBufferSetAllocationScheme(xmlBufferPtr
buf,
7064 xmlBufferAllocationScheme
scheme) {
7068 if (
buf->alloc == XML_BUFFER_ALLOC_IO)
return;
7069 if ((
scheme == XML_BUFFER_ALLOC_DOUBLEIT) ||
7070 (
scheme == XML_BUFFER_ALLOC_EXACT) ||
7071 (
scheme == XML_BUFFER_ALLOC_HYBRID))
7083xmlBufferFree(xmlBufferPtr
buf) {
7088 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) &&
7091 }
else if (
buf->content !=
NULL) {
7104xmlBufferEmpty(xmlBufferPtr
buf) {
7106 if (
buf->content ==
NULL)
return;
7108 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) && (
buf->contentIO !=
NULL)) {
7109 size_t start_buf =
buf->content -
buf->contentIO;
7111 buf->size += start_buf;
7112 buf->content =
buf->contentIO;
7113 buf->content[0] = 0;
7115 buf->content[0] = 0;
7129xmlBufferShrink(xmlBufferPtr
buf,
unsigned int len) {
7131 if (
len == 0)
return(0);
7132 if (
len >
buf->use)
return(-1);
7135 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) && (
buf->contentIO !=
NULL)) {
7147 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) && (
buf->contentIO !=
NULL)) {
7148 size_t start_buf =
buf->content -
buf->contentIO;
7149 if (start_buf >=
buf->size) {
7151 buf->content =
buf->contentIO;
7152 buf->content[
buf->use] = 0;
7153 buf->size += start_buf;
7158 buf->content[
buf->use] = 0;
7173xmlBufferGrow(xmlBufferPtr
buf,
unsigned int len) {
7179 if (len < buf->
size -
buf->use)
7186 if (
buf->size > (
size_t)
len) {
7193 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) && (
buf->contentIO !=
NULL)) {
7194 size_t start_buf =
buf->content -
buf->contentIO;
7197 if (newbuf ==
NULL) {
7201 buf->contentIO = newbuf;
7202 buf->content = newbuf + start_buf;
7205 if (newbuf ==
NULL) {
7209 buf->content = newbuf;
7212 return(
buf->size -
buf->use - 1);
7249xmlBufferContent(
const xmlBuffer *
buf)
7254 return buf->content;
7267xmlBufferLength(
const xmlBuffer *
buf)
7285xmlBufferResize(xmlBufferPtr
buf,
unsigned int size)
7287 unsigned int newSize;
7295 if (size < buf->
size)
7304 switch (
buf->alloc){
7305 case XML_BUFFER_ALLOC_IO:
7306 case XML_BUFFER_ALLOC_DOUBLEIT:
7311 newSize =
buf->size;
7312 while (
size > newSize) {
7320 case XML_BUFFER_ALLOC_EXACT:
7323 case XML_BUFFER_ALLOC_HYBRID:
7324 if (
buf->use < BASE_BUFFER_SIZE)
7327 newSize =
buf->size;
7328 while (
size > newSize) {
7343 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) && (
buf->contentIO !=
NULL)) {
7344 start_buf =
buf->content -
buf->contentIO;
7346 if (start_buf > newSize) {
7349 buf->content =
buf->contentIO;
7350 buf->content[
buf->use] = 0;
7351 buf->size += start_buf;
7354 if (rebuf ==
NULL) {
7358 buf->contentIO = rebuf;
7359 buf->content = rebuf + start_buf;
7365 rebuf[
buf->use] = 0;
7366 }
else if (
buf->size -
buf->use < 100) {
7375 if (rebuf !=
NULL) {
7378 rebuf[
buf->use] = 0;
7381 if (rebuf ==
NULL) {
7385 buf->content = rebuf;
7387 buf->size = newSize;
7406 unsigned int needSize;
7414 if (
len == 0)
return 0;
7419 if (
len < 0)
return -1;
7420 if (
len == 0)
return 0;
7423 if ((
unsigned)
len >=
buf->size -
buf->use) {
7428 needSize =
buf->use +
len + 1;
7429 if (!xmlBufferResize(
buf, needSize)){
7437 buf->content[
buf->use] = 0;
7455 unsigned int needSize;
7465 if (
len == 0)
return 0;
7470 if (
len <= 0)
return -1;
7472 if ((
buf->alloc == XML_BUFFER_ALLOC_IO) && (
buf->contentIO !=
NULL)) {
7473 size_t start_buf =
buf->content -
buf->contentIO;
7475 if (start_buf > (
unsigned int)
len) {
7483 buf->content[
buf->use] = 0;
7488 if ((
unsigned)
len >=
buf->size -
buf->use) {
7493 needSize =
buf->use +
len + 1;
7494 if (!xmlBufferResize(
buf, needSize)){
7503 buf->content[
buf->use] = 0;
7522 return xmlBufferAdd(
buf,
str, -1);
7536xmlBufferCCat(xmlBufferPtr
buf,
const char *
str) {
7549xmlBufferWriteCHAR(xmlBufferPtr
buf,
const xmlChar *
string) {
7552 xmlBufferCat(
buf,
string);
7564xmlBufferWriteChar(xmlBufferPtr
buf,
const char *
string) {
7567 xmlBufferCCat(
buf,
string);
7581xmlBufferWriteQuotedString(xmlBufferPtr
buf,
const xmlChar *
string) {
7587 xmlBufferCCat(
buf,
"\"");
7603 xmlBufferCCat(
buf,
"\"");
7606 xmlBufferCCat(
buf,
"\'");
7607 xmlBufferCat(
buf,
string);
7608 xmlBufferCCat(
buf,
"\'");
7611 xmlBufferCCat(
buf,
"\"");
7612 xmlBufferCat(
buf,
string);
7613 xmlBufferCCat(
buf,
"\"");
7626xmlGetDocCompressMode (
const xmlDoc *doc) {
7627 if (doc ==
NULL)
return(-1);
7628 return(doc->compression);
7640xmlSetDocCompressMode (xmlDocPtr doc,
int mode) {
7641 if (doc ==
NULL)
return;
7642 if (
mode < 0) doc->compression = 0;
7643 else if (
mode > 9) doc->compression = 9;
7644 else doc->compression =
mode;
7654xmlGetCompressMode(
void)
7656 return (xmlCompressMode);
7667xmlSetCompressMode(
int mode) {
7668 if (
mode < 0) xmlCompressMode = 0;
7669 else if (
mode > 9) xmlCompressMode = 9;
7670 else xmlCompressMode =
mode;
7673#define XML_TREE_NSMAP_PARENT -1
7674#define XML_TREE_NSMAP_XML -2
7675#define XML_TREE_NSMAP_DOC -3
7676#define XML_TREE_NSMAP_CUSTOM -4
7678typedef struct xmlNsMapItem *xmlNsMapItemPtr;
7679struct xmlNsMapItem {
7680 xmlNsMapItemPtr
next;
7681 xmlNsMapItemPtr prev;
7696typedef struct xmlNsMap *xmlNsMapPtr;
7698 xmlNsMapItemPtr
first;
7699 xmlNsMapItemPtr
last;
7700 xmlNsMapItemPtr
pool;
7703#define XML_NSMAP_NOTEMPTY(m) (((m) != NULL) && ((m)->first != NULL))
7704#define XML_NSMAP_FOREACH(m, i) for (i = (m)->first; i != NULL; i = (i)->next)
7705#define XML_NSMAP_POP(m, i) \
7707 (m)->last = (i)->prev; \
7708 if ((m)->last == NULL) \
7709 (m)->first = NULL; \
7711 (m)->last->next = NULL; \
7712 (i)->next = (m)->pool; \
7722xmlDOMWrapNsMapFree(xmlNsMapPtr nsmap)
7724 xmlNsMapItemPtr
cur, tmp;
7752static xmlNsMapItemPtr
7753xmlDOMWrapNsMapAddItem(xmlNsMapPtr *nsmap,
int position,
7754 xmlNsPtr oldNs, xmlNsPtr newNs,
int depth)
7756 xmlNsMapItemPtr
ret;
7761 if ((position != -1) && (position != 0))
7769 map = (xmlNsMapPtr)
xmlMalloc(
sizeof(
struct xmlNsMap));
7774 memset(
map, 0,
sizeof(
struct xmlNsMap));
7784 memset(
ret, 0,
sizeof(
struct xmlNsMapItem));
7789 ret = (xmlNsMapItemPtr)
xmlMalloc(
sizeof(
struct xmlNsMapItem));
7794 memset(
ret, 0,
sizeof(
struct xmlNsMapItem));
7803 }
else if (position == -1) {
7810 }
else if (position == 0) {
7821 ret->shadowDepth = -1;
7839xmlDOMWrapStoreNs(xmlDocPtr doc,
7847 ns = xmlTreeEnsureXMLDecl(doc);
7880xmlDOMWrapNewCtxt(
void)
7882 xmlDOMWrapCtxtPtr
ret;
7900xmlDOMWrapFreeCtxt(xmlDOMWrapCtxtPtr ctxt)
7904 if (ctxt->namespaceMap !=
NULL)
7905 xmlDOMWrapNsMapFree((xmlNsMapPtr) ctxt->namespaceMap);
7923xmlTreeNSListLookupByPrefix(xmlNsPtr nsList,
const xmlChar *
prefix)
7952xmlDOMWrapNSNormGatherInScopeNs(xmlNsMapPtr *
map,
7962 if ((
node ==
NULL) || (
node->type == XML_NAMESPACE_DECL))
7969 if (
cur->type == XML_ELEMENT_NODE) {
7989 mi = xmlDOMWrapNsMapAddItem(
map, 0,
NULL,
7994 mi->shadowDepth = 0;
8008#define XML_TREE_ADOPT_STR(str) \
8009 if (adoptStr && (str != NULL)) { \
8010 if (destDoc->dict) { \
8011 const xmlChar *old = str; \
8012 str = xmlDictLookup(destDoc->dict, str, -1); \
8013 if ((sourceDoc == NULL) || (sourceDoc->dict == NULL) || \
8014 (!xmlDictOwns(sourceDoc->dict, old))) \
8015 xmlFree((char *)old); \
8016 } else if ((sourceDoc) && (sourceDoc->dict) && \
8017 xmlDictOwns(sourceDoc->dict, str)) { \
8018 str = BAD_CAST xmlStrdup(str); \
8026#define XML_TREE_ADOPT_STR_2(str) \
8027 if (adoptStr && (str != NULL) && (sourceDoc != NULL) && \
8028 (sourceDoc->dict != NULL) && \
8029 xmlDictOwns(sourceDoc->dict, cur->content)) { \
8030 if (destDoc->dict) \
8031 cur->content = (xmlChar *) \
8032 xmlDictLookup(destDoc->dict, cur->content, -1); \
8034 cur->content = xmlStrdup(BAD_CAST cur->content); \
8045xmlDOMWrapNSNormAddNsMapItem2(xmlNsPtr **
list,
int *
size,
int *
number,
8046 xmlNsPtr oldNs, xmlNsPtr newNs)
8059 (*
size) * 2 *
sizeof(xmlNsPtr));
8065 (*list)[2 * (*number)] = oldNs;
8066 (*list)[2 * (*number) +1] = newNs;
8089xmlDOMWrapRemoveNode(xmlDOMWrapCtxtPtr ctxt, xmlDocPtr doc,
8093 int sizeList, nbList,
i,
j;
8103 switch (
node->type) {
8105 case XML_CDATA_SECTION_NODE:
8106 case XML_ENTITY_REF_NODE:
8108 case XML_COMMENT_NODE:
8109 xmlUnlinkNode(
node);
8111 case XML_ELEMENT_NODE:
8112 case XML_ATTRIBUTE_NODE:
8117 xmlUnlinkNode(
node);
8122 switch (
node->type) {
8123 case XML_ELEMENT_NODE:
8127 if (xmlDOMWrapNSNormAddNsMapItem2(&
list, &sizeList,
8128 &nbList,
ns,
ns) == -1)
8129 goto internal_error;
8134 case XML_ATTRIBUTE_NODE:
8140 for (
i = 0,
j = 0;
i < nbList;
i++,
j += 2) {
8156 ns = xmlDOMWrapStoreNs(doc,
node->ns->href,
8159 goto internal_error;
8165 if (xmlDOMWrapNSNormAddNsMapItem2(&
list, &sizeList,
8166 &nbList,
node->ns,
ns) == -1)
8167 goto internal_error;
8171 if ((
node->type == XML_ELEMENT_NODE) &&
8173 node = (xmlNodePtr)
node->properties;
8181 if ((
node->type == XML_ELEMENT_NODE) &&
8222xmlSearchNsByNamespaceStrict(xmlDocPtr doc, xmlNodePtr
node,
8224 xmlNsPtr *retNs,
int prefixed)
8227 xmlNsPtr
ns, prevns;
8229 if ((doc ==
NULL) || (nsName ==
NULL) || (retNs ==
NULL))
8231 if ((
node ==
NULL) || (
node->type == XML_NAMESPACE_DECL))
8236 *retNs = xmlTreeEnsureXMLDecl(doc);
8243 if (
cur->type == XML_ELEMENT_NODE) {
8253 prevns = prev->nsDef;
8255 if ((prevns->prefix ==
ns->
prefix) ||
8256 ((prevns->prefix !=
NULL) &&
8264 prevns = prevns->
next;
8265 }
while (prevns !=
NULL);
8272 if ((nsName ==
ns->href) ||
8302 }
else if ((
cur->type == XML_ENTITY_NODE) ||
8303 (
cur->type == XML_ENTITY_DECL))
8324xmlSearchNsByPrefixStrict(xmlDocPtr doc, xmlNodePtr
node,
8338 *retNs = xmlTreeEnsureXMLDecl(doc);
8346 if (
cur->type == XML_ELEMENT_NODE) {
8365 }
else if ((
cur->type == XML_ENTITY_NODE) ||
8366 (
cur->type == XML_ENTITY_DECL))
8389xmlDOMWrapNSNormDeclareNsForced(xmlDocPtr doc,
8412 (xmlTreeNSListLookupByPrefix(
elem->nsDef, pref) !=
NULL))
8413 goto ns_next_prefix;
8414 if (checkShadow &&
elem->parent &&
8415 ((xmlNodePtr)
elem->parent->doc !=
elem->parent)) {
8419 if (xmlSearchNsByPrefixStrict(doc,
elem->parent, pref,
NULL) == 1)
8420 goto ns_next_prefix;
8422 ret = xmlNewNs(
NULL, nsName, pref);
8428 xmlNsPtr ns2 =
elem->nsDef;
8429 while (ns2->next !=
NULL)
8468xmlDOMWrapNSNormAcquireNormalizedNs(xmlDocPtr doc,
8492 *retNs = xmlTreeEnsureXMLDecl(doc);
8502 (! (ancestorsOnly && (
elem ==
NULL))))
8517 (
mi->shadowDepth == -1) &&
8519 ((
mi->newNs->href !=
NULL) &&
8520 (
mi->newNs->href[0] != 0)) &&
8522 ((! prefixed) || (
mi->newNs->prefix !=
NULL)) &&
8524 ((
mi->newNs->href ==
ns->href) ||
8542 tmpns = xmlDOMWrapStoreNs(doc,
ns->href,
ns->
prefix);
8548 if (xmlDOMWrapNsMapAddItem(nsMap, -1,
ns,
8557 tmpns = xmlDOMWrapNSNormDeclareNsForced(doc,
elem,
ns->href,
8562 if (*nsMap !=
NULL) {
8568 (
mi->shadowDepth == -1) &&
8579 if (xmlDOMWrapNsMapAddItem(nsMap, -1,
ns, tmpns,
depth) ==
NULL) {
8589 XML_DOM_RECONNS_REMOVEREDUND = 1<<0
8590} xmlDOMReconcileNSOptions;
8614 int depth = -1, adoptns = 0, parnsdone = 0;
8615 xmlNsPtr
ns, prevns;
8617 xmlNodePtr
cur, curElem =
NULL;
8618 xmlNsMapPtr nsMap =
NULL;
8621 int ancestorsOnly = 0;
8622 int optRemoveRedundantNS =
8623 ((xmlDOMReconcileNSOptions)
options & XML_DOM_RECONNS_REMOVEREDUND) ? 1 : 0;
8624 xmlNsPtr *listRedund =
NULL;
8625 int sizeRedund = 0, nbRedund = 0,
ret,
i,
j;
8628 (
elem->type != XML_ELEMENT_NODE))
8634 switch (
cur->type) {
8635 case XML_ELEMENT_NODE:
8647 if ((
elem->parent) &&
8648 ((xmlNodePtr)
elem->parent->doc !=
elem->parent)) {
8652 if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
8653 elem->parent) == -1)
8654 goto internal_error;
8665 (
mi->shadowDepth == -1) &&
8668 ((
ns->href ==
mi->newNs->href) ||
8675 if (xmlDOMWrapNSNormAddNsMapItem2(&listRedund,
8676 &sizeRedund, &nbRedund,
ns,
mi->newNs) == -1)
8677 goto internal_error;
8684 cur->nsDef =
ns->next;
8702 (
mi->shadowDepth == -1) &&
8713 if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
ns,
ns,
8715 goto internal_error;
8725 case XML_ATTRIBUTE_NODE:
8731 if ((
elem->parent) &&
8732 ((xmlNodePtr)
elem->parent->doc !=
elem->parent)) {
8733 if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
8734 elem->parent) == -1)
8735 goto internal_error;
8743 for (
i = 0,
j = 0;
i < nbRedund;
i++,
j += 2) {
8744 if (
cur->ns == listRedund[
j]) {
8745 cur->ns = listRedund[++
j];
8758 if ((
mi->shadowDepth == -1) &&
8759 (
cur->ns ==
mi->oldNs)) {
8761 cur->ns =
mi->newNs;
8769 if (xmlDOMWrapNSNormAcquireNormalizedNs(doc, curElem,
8773 (
cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1)
8774 goto internal_error;
8778 if ((
cur->type == XML_ELEMENT_NODE) &&
8783 cur = (xmlNodePtr)
cur->properties;
8791 if ((
cur->type == XML_ELEMENT_NODE) &&
8802 if (
cur->type == XML_ELEMENT_NODE) {
8807 while ((nsMap->last !=
NULL) &&
8808 (nsMap->last->depth >=
depth))
8817 mi->shadowDepth = -1;
8825 if (
cur->type == XML_ATTRIBUTE_NODE) {
8840 for (
i = 0,
j = 0;
i < nbRedund;
i++,
j += 2) {
8841 xmlFreeNs(listRedund[
j]);
8846 xmlDOMWrapNsMapFree(nsMap);
8873xmlDOMWrapAdoptBranch(xmlDOMWrapCtxtPtr ctxt,
8874 xmlDocPtr sourceDoc,
8877 xmlNodePtr destParent,
8881 xmlNodePtr
cur, curElem =
NULL;
8882 xmlNsMapPtr nsMap =
NULL;
8885 int depth = -1, adoptStr = 1;
8889 int ancestorsOnly = 0;
8894 if ((sourceDoc !=
NULL) &&
8895 (sourceDoc->dict == destDoc->dict))
8904 nsMap = (xmlNsMapPtr) ctxt->namespaceMap;
8911 if ((destParent ==
NULL) ||
8912 (ctxt && ctxt->getNsForNodeFunc))
8919 if ((
cur !=
NULL) && (
cur->type == XML_NAMESPACE_DECL))
8920 goto internal_error;
8926 if (
cur->doc != sourceDoc) {
8937 if ((
cur->type == XML_XINCLUDE_END) ||
8946 switch (
cur->type) {
8947 case XML_XINCLUDE_START:
8948 case XML_XINCLUDE_END:
8953 case XML_ELEMENT_NODE:
8965 ((ctxt ==
NULL) || (ctxt->getNsForNodeFunc ==
NULL)))
8971 if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
8973 goto internal_error;
8988 (
mi->shadowDepth == -1) &&
8991 mi->newNs->prefix))) {
9000 if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
9002 goto internal_error;
9006 case XML_ATTRIBUTE_NODE:
9012 if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
9014 goto internal_error;
9025 if ((
mi->shadowDepth == -1) &&
9026 (
cur->ns ==
mi->oldNs)) {
9028 cur->ns =
mi->newNs;
9036 if ((ctxt) && (ctxt->getNsForNodeFunc)) {
9040 ns = ctxt->getNsForNodeFunc(ctxt,
cur,
9041 cur->ns->href,
cur->ns->prefix);
9046 if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
9048 goto internal_error;
9054 if (xmlDOMWrapNSNormAcquireNormalizedNs(destDoc,
9056 destParent ? curElem :
NULL,
9061 (
cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1)
9062 goto internal_error;
9078 if (
cur->properties !=
NULL) {
9082 cur = (xmlNodePtr)
cur->properties;
9089 if ((sourceDoc !=
NULL) &&
9090 (((xmlAttrPtr)
cur)->atype == XML_ATTRIBUTE_ID))
9094 ((xmlAttrPtr)
cur)->atype = 0;
9095 ((xmlAttrPtr)
cur)->psvi =
NULL;
9099 case XML_CDATA_SECTION_NODE:
9106 case XML_ENTITY_REF_NODE:
9113 if ((destDoc->intSubset) || (destDoc->extSubset)) {
9120 cur->content = ent->content;
9121 cur->children = (xmlNodePtr) ent;
9122 cur->last = (xmlNodePtr) ent;
9130 case XML_COMMENT_NODE:
9133 goto internal_error;
9146 if ((
cur->type == XML_ELEMENT_NODE) ||
9147 (
cur->type == XML_XINCLUDE_START) ||
9148 (
cur->type == XML_XINCLUDE_END))
9157 while ((nsMap->last !=
NULL) &&
9158 (nsMap->last->depth >=
depth))
9167 mi->shadowDepth = -1;
9174 else if ((
cur->type == XML_ATTRIBUTE_NODE) &&
9175 (
cur->parent->children !=
NULL))
9177 cur =
cur->parent->children;
9193 if (nsMap !=
NULL) {
9194 if ((ctxt) && (ctxt->namespaceMap == nsMap)) {
9200 nsMap->last->
next = nsMap->pool;
9201 nsMap->pool = nsMap->first;
9202 nsMap->first =
NULL;
9205 xmlDOMWrapNsMapFree(nsMap);
9241xmlDOMWrapCloneNode(xmlDOMWrapCtxtPtr ctxt,
9242 xmlDocPtr sourceDoc,
9244 xmlNodePtr *resNode,
9246 xmlNodePtr destParent,
9251 xmlNodePtr
cur, curElem =
NULL;
9252 xmlNsMapPtr nsMap =
NULL;
9264 int ancestorsOnly = 0;
9265 xmlNodePtr resultClone =
NULL, clone =
NULL, parentClone =
NULL, prevClone =
NULL;
9266 xmlNsPtr cloneNs =
NULL, *cloneNsDefSlot =
NULL;
9274 if (
node->type != XML_ELEMENT_NODE)
9280 (
node->doc != sourceDoc)) {
9286 if (sourceDoc ==
NULL)
9287 sourceDoc =
node->doc;
9288 if (sourceDoc ==
NULL)
9291 dict = destDoc->dict;
9296 nsMap = (xmlNsMapPtr) ctxt->namespaceMap;
9301 if ((
cur !=
NULL) && (
cur->type == XML_NAMESPACE_DECL))
9305 if (
cur->doc != sourceDoc) {
9311 goto internal_error;
9316 switch (
cur->type) {
9317 case XML_XINCLUDE_START:
9318 case XML_XINCLUDE_END:
9322 goto internal_error;
9324 case XML_ELEMENT_NODE:
9326 case XML_CDATA_SECTION_NODE:
9327 case XML_COMMENT_NODE:
9329 case XML_DOCUMENT_FRAG_NODE:
9330 case XML_ENTITY_REF_NODE:
9331 case XML_ENTITY_NODE:
9335 clone = (xmlNodePtr)
xmlMalloc(
sizeof(xmlNode));
9336 if (clone ==
NULL) {
9338 goto internal_error;
9340 memset(clone, 0,
sizeof(xmlNode));
9344 if (resultClone !=
NULL) {
9345 clone->parent = parentClone;
9347 prevClone->next = clone;
9348 clone->prev = prevClone;
9350 parentClone->children = clone;
9352 resultClone = clone;
9355 case XML_ATTRIBUTE_NODE:
9361 if (clone ==
NULL) {
9363 goto internal_error;
9365 memset(clone, 0,
sizeof(xmlAttr));
9370 if (resultClone !=
NULL) {
9371 clone->parent = parentClone;
9373 prevClone->next = clone;
9374 clone->prev = prevClone;
9376 parentClone->properties = (xmlAttrPtr) clone;
9378 resultClone = clone;
9384 goto internal_error;
9387 clone->type =
cur->type;
9388 clone->doc = destDoc;
9408 switch (
cur->type) {
9409 case XML_XINCLUDE_START:
9410 case XML_XINCLUDE_END:
9415 case XML_ELEMENT_NODE:
9423 if (destParent && (ctxt ==
NULL)) {
9427 if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
9429 goto internal_error;
9436 cloneNsDefSlot = &(clone->nsDef);
9441 cloneNs = (xmlNsPtr)
xmlMalloc(
sizeof(xmlNs));
9442 if (cloneNs ==
NULL) {
9444 "allocating namespace");
9447 memset(cloneNs, 0,
sizeof(xmlNs));
9448 cloneNs->type = XML_LOCAL_NAMESPACE;
9455 *cloneNsDefSlot = cloneNs;
9456 cloneNsDefSlot = &(cloneNs->next);
9463 if ((ctxt ==
NULL) ||
9464 (ctxt->getNsForNodeFunc ==
NULL))
9472 (
mi->shadowDepth == -1) &&
9475 mi->newNs->prefix))) {
9487 if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
9489 goto internal_error;
9495 case XML_ATTRIBUTE_NODE:
9500 case XML_CDATA_SECTION_NODE:
9506 case XML_ENTITY_NODE:
9509 case XML_ENTITY_REF_NODE:
9510 if (sourceDoc != destDoc) {
9511 if ((destDoc->intSubset) || (destDoc->extSubset)) {
9518 clone->content = ent->content;
9519 clone->children = (xmlNodePtr) ent;
9520 clone->last = (xmlNodePtr) ent;
9528 clone->content =
cur->content;
9529 clone->children =
cur->children;
9530 clone->last =
cur->last;
9536 case XML_COMMENT_NODE:
9540 goto internal_error;
9544 goto end_ns_reference;
9553 if (destParent && (ctxt ==
NULL)) {
9554 if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, destParent) == -1)
9555 goto internal_error;
9567 if ((
mi->shadowDepth == -1) &&
9568 (
cur->ns ==
mi->oldNs)) {
9572 clone->ns =
mi->newNs;
9573 goto end_ns_reference;
9580 if ((ctxt !=
NULL) && (ctxt->getNsForNodeFunc !=
NULL)) {
9584 ns = ctxt->getNsForNodeFunc(ctxt,
cur,
9585 cur->ns->href,
cur->ns->prefix);
9589 if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
9591 goto internal_error;
9597 if (xmlDOMWrapNSNormAcquireNormalizedNs(destDoc,
9599 destParent ? curElem :
NULL,
9605 (
cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1)
9606 goto internal_error;
9617 if ((clone->type == XML_ATTRIBUTE_NODE) &&
9618 (clone->parent !=
NULL))
9620 if (
xmlIsID(destDoc, clone->parent, (xmlAttrPtr) clone)) {
9624 idVal = xmlNodeListGetString(
cur->doc,
cur->children, 1);
9625 if (idVal !=
NULL) {
9629 goto internal_error;
9642 if ((
cur->type == XML_ELEMENT_NODE) && (
cur->properties !=
NULL)) {
9644 parentClone = clone;
9645 cur = (xmlNodePtr)
cur->properties;
9653 if (deep || (
cur->type == XML_ATTRIBUTE_NODE)) {
9655 parentClone = clone;
9668 if ((
cur->type == XML_ELEMENT_NODE) ||
9669 (
cur->type == XML_XINCLUDE_START) ||
9670 (
cur->type == XML_XINCLUDE_END)) {
9678 while ((nsMap->last !=
NULL) &&
9679 (nsMap->last->depth >=
depth))
9688 mi->shadowDepth = -1;
9696 }
else if (
cur->type != XML_ATTRIBUTE_NODE) {
9700 if (clone->parent !=
NULL)
9701 clone->parent->last = clone;
9702 clone = clone->parent;
9704 parentClone = clone->parent;
9712 clone = clone->parent;
9713 parentClone = clone->parent;
9730 if (nsMap !=
NULL) {
9731 if ((ctxt) && (ctxt->namespaceMap == nsMap)) {
9737 nsMap->last->
next = nsMap->pool;
9738 nsMap->pool = nsMap->first;
9739 nsMap->first =
NULL;
9742 xmlDOMWrapNsMapFree(nsMap);
9748 *resNode = resultClone;
9769xmlDOMWrapAdoptAttr(xmlDOMWrapCtxtPtr ctxt,
9770 xmlDocPtr sourceDoc,
9773 xmlNodePtr destParent,
9782 attr->doc = destDoc;
9791 ns = xmlTreeEnsureXMLDecl(destDoc);
9792 }
else if (destParent ==
NULL) {
9796 ns = xmlDOMWrapStoreNs(destDoc,
attr->ns->href,
attr->ns->prefix);
9801 if (xmlSearchNsByNamespaceStrict(destDoc, destParent,
attr->ns->href,
9803 goto internal_error;
9805 ns = xmlDOMWrapNSNormDeclareNsForced(destDoc, destParent,
9806 attr->ns->href,
attr->ns->prefix, 1);
9810 goto internal_error;
9823 if ((
cur !=
NULL) && (
cur->type == XML_NAMESPACE_DECL))
9824 goto internal_error;
9827 switch (
cur->type) {
9829 case XML_CDATA_SECTION_NODE:
9832 case XML_ENTITY_REF_NODE:
9839 if ((destDoc->intSubset) || (destDoc->extSubset)) {
9846 cur->content = ent->content;
9847 cur->children = (xmlNodePtr) ent;
9848 cur->last = (xmlNodePtr) ent;
9902xmlDOMWrapAdoptNode(xmlDOMWrapCtxtPtr ctxt,
9903 xmlDocPtr sourceDoc,
9906 xmlNodePtr destParent,
9909 if ((
node ==
NULL) || (
node->type == XML_NAMESPACE_DECL) ||
9910 (destDoc ==
NULL) ||
9911 ((destParent !=
NULL) && (destParent->doc != destDoc)))
9917 (
node->doc != sourceDoc)) {
9923 if (sourceDoc ==
NULL)
9924 sourceDoc =
node->doc;
9925 if (sourceDoc == destDoc)
9927 switch (
node->type) {
9928 case XML_ELEMENT_NODE:
9929 case XML_ATTRIBUTE_NODE:
9931 case XML_CDATA_SECTION_NODE:
9932 case XML_ENTITY_REF_NODE:
9934 case XML_COMMENT_NODE:
9936 case XML_DOCUMENT_FRAG_NODE:
9945 if ((
node->parent !=
NULL) && (destParent !=
node->parent))
9946 xmlUnlinkNode(
node);
9948 if (
node->type == XML_ELEMENT_NODE) {
9949 return (xmlDOMWrapAdoptBranch(ctxt, sourceDoc,
node,
9950 destDoc, destParent,
options));
9951 }
else if (
node->type == XML_ATTRIBUTE_NODE) {
9952 return (xmlDOMWrapAdoptAttr(ctxt, sourceDoc,
9953 (xmlAttrPtr)
node, destDoc, destParent,
options));
9962 if ((sourceDoc !=
NULL) &&
9963 (sourceDoc->dict == destDoc->dict))
9965 switch (
node->type) {
9967 case XML_CDATA_SECTION_NODE:
9970 case XML_ENTITY_REF_NODE:
9977 if ((destDoc->intSubset) || (destDoc->extSubset)) {
9984 node->content = ent->content;
9985 node->children = (xmlNodePtr) ent;
9986 node->last = (xmlNodePtr) ent;
10009#define XHTML_STRICT_PUBLIC_ID BAD_CAST \
10010 "-//W3C//DTD XHTML 1.0 Strict//EN"
10011#define XHTML_STRICT_SYSTEM_ID BAD_CAST \
10012 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
10013#define XHTML_FRAME_PUBLIC_ID BAD_CAST \
10014 "-//W3C//DTD XHTML 1.0 Frameset//EN"
10015#define XHTML_FRAME_SYSTEM_ID BAD_CAST \
10016 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
10017#define XHTML_TRANS_PUBLIC_ID BAD_CAST \
10018 "-//W3C//DTD XHTML 1.0 Transitional//EN"
10019#define XHTML_TRANS_SYSTEM_ID BAD_CAST \
10020 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
10033 if ((systemID ==
NULL) && (publicID ==
NULL))
10035 if (publicID !=
NULL) {
10040 if (systemID !=
NULL) {
10063xmlRegisterNodeDefault(xmlRegisterNodeFunc
func)
10080xmlDeregisterNodeFunc
10081xmlDeregisterNodeDefault(xmlDeregisterNodeFunc
func)
struct outqueuenode * head
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
xmlBufPtr xmlBufFromBuffer(xmlBufferPtr buffer)
int xmlBufIsEmpty(const xmlBufPtr buf)
void xmlBufFree(xmlBufPtr buf)
xmlChar * xmlBufDetach(xmlBufPtr buf)
xmlBufPtr xmlBufCreateSize(size_t size)
xmlBufPtr xmlBufCreate(void)
int xmlBufSetAllocationScheme(xmlBufPtr buf, xmlBufferAllocationScheme scheme)
xmlBufferPtr xmlBufBackToBuffer(xmlBufPtr buf)
int xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len)
int xmlBufCat(xmlBufPtr buf, const xmlChar *str)
static const WCHAR version[]
BOOL next_node(stream_t *stream, strbuf_t *buf)
size_t CDECL fwrite(const void *ptr, size_t size, size_t nmemb, FILE *file)
_ACRTIMP size_t __cdecl strlen(const char *)
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLuint GLsizei GLenum type
GLdouble GLdouble GLdouble GLdouble q
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
XMLPUBFUN xmlChar * xmlEncodeSpecialChars(const xmlDoc *doc, const xmlChar *input)
XMLPUBFUN xmlEntityPtr xmlGetDocEntity(const xmlDoc *doc, const xmlChar *name)
@ XML_EXTERNAL_GENERAL_PARSED_ENTITY
@ XML_INTERNAL_PREDEFINED_ENTITY
@ XML_EXTERNAL_GENERAL_UNPARSED_ENTITY
@ XML_INTERNAL_GENERAL_ENTITY
@ XML_INTERNAL_PARAMETER_ENTITY
@ XML_EXTERNAL_PARAMETER_ENTITY
XMLPUBFUN void xmlFreeEntitiesTable(xmlEntitiesTablePtr table)
xmlEntitiesTable * xmlEntitiesTablePtr
XMLPUBFUN xmlChar * xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static unsigned int number
static char memory[1024 *256]
XMLPUBFUN int xmlCopyCharMultiByte(xmlChar *out, int val)
XMLPUBVAR const xmlChar xmlStringComment[]
XMLPUBVAR const xmlChar xmlStringTextNoenc[]
XMLPUBVAR const xmlChar xmlStringText[]
#define XML_ENT_EXPANDING
XML_HIDDEN xmlChar * xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input)
static unsigned __int64 next
void xmlDictFree(xmlDictPtr dict)
int xmlDictOwns(xmlDictPtr dict, const xmlChar *str)
const xmlChar * xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len)
void * xmlGenericErrorContext
xmlReallocFunc xmlRealloc
xmlRegisterNodeFunc xmlRegisterNodeDefaultValue
xmlGenericErrorFunc xmlGenericError
xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue
xmlMallocFunc xmlMallocAtomic
xmlStrdupFunc xmlMemStrdup
xmlBufferAllocationScheme xmlBufferAllocScheme
void * xmlHashLookup(xmlHashTablePtr hash, const xmlChar *key)
int xmlHashRemoveEntry(xmlHashTablePtr hash, const xmlChar *key, xmlHashDeallocator dealloc)
XML_HIDDEN void XML_HIDDEN void __xmlSimpleError(int domain, int code, struct _xmlNode *node, const char *msg, const char *extra) LIBXML_ATTR_FORMAT(4
XML_HIDDEN xmlNodePtr xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent)
XML_HIDDEN xmlNodePtr xmlStaticCopyNode(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent, int extended)
int __xmlRegisterCallbacks
static xmlNsPtr xmlNewReconciledNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns)
#define XHTML_TRANS_PUBLIC_ID
#define XML_NSMAP_POP(m, i)
#define XHTML_FRAME_SYSTEM_ID
static void xmlTreeErrMemory(const char *extra)
#define XHTML_STRICT_SYSTEM_ID
#define DICT_CONST_COPY(str, cpy)
#define XML_TREE_ADOPT_STR_2(str)
#define UPDATE_LAST_CHILD_AND_PARENT(n)
#define XHTML_FRAME_PUBLIC_ID
#define XHTML_TRANS_SYSTEM_ID
#define XHTML_STRICT_PUBLIC_ID
#define XML_TREE_NSMAP_DOC
#define XML_TREE_NSMAP_CUSTOM
#define XML_NSMAP_NOTEMPTY(m)
#define DICT_COPY(str, cpy)
static xmlChar * xmlGetPropNodeValueInternal(const xmlAttr *prop)
#define XML_TREE_NSMAP_PARENT
#define XML_NSMAP_FOREACH(m, i)
#define XML_TREE_ADOPT_STR(str)
Character const *const prefix
XMLPUBFUN xmlChar * xmlBuildURI(const xmlChar *URI, const xmlChar *base)
XMLPUBFUN xmlChar * xmlPathToURI(const xmlChar *path)
XMLPUBFUN void xmlFreeElementTable(xmlElementTablePtr table)
XML_DEPRECATED XMLPUBFUN void xmlFreeRefTable(xmlRefTablePtr table)
XMLPUBFUN xmlAttributePtr xmlGetDtdAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name)
XMLPUBFUN int xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr)
XMLPUBFUN xmlElementPtr xmlGetDtdQElementDesc(xmlDtdPtr dtd, const xmlChar *name, const xmlChar *prefix)
XMLPUBFUN void xmlFreeIDTable(xmlIDTablePtr table)
XMLPUBFUN void xmlFreeNotationTable(xmlNotationTablePtr table)
XMLPUBFUN xmlIDPtr xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr)
XMLPUBFUN xmlAttributePtr xmlGetDtdQAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name, const xmlChar *prefix)
XMLPUBFUN int xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr)
XMLPUBFUN void xmlFreeAttributeTable(xmlAttributeTablePtr table)
static const WCHAR lang[]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
@ XML_TREE_UNTERMINATED_ENTITY
XMLPUBFUN xmlChar * xmlStrndup(const xmlChar *cur, int len)
XMLPUBFUN xmlChar * xmlStrncatNew(const xmlChar *str1, const xmlChar *str2, int len)
XMLPUBFUN int xmlStrlen(const xmlChar *str)
XMLPUBFUN int xmlStrcasecmp(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN int xmlStrncmp(const xmlChar *str1, const xmlChar *str2, int len)
XMLPUBFUN xmlChar * xmlStrncat(xmlChar *cur, const xmlChar *add, int len)
XMLPUBFUN xmlChar * xmlStrcat(xmlChar *cur, const xmlChar *add)
XMLPUBFUN int xmlStrEqual(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN const xmlChar * xmlStrchr(const xmlChar *str, xmlChar val)
XMLPUBFUN xmlChar * xmlStrdup(const xmlChar *cur)