24#if defined(HAVE_LIBXML) && defined(HAVE_SIMPLEXML)
46static xmlNodePtr php_sxe_reset_iterator_no_clear_iter_data(
php_sxe_object *sxe,
int use_data);
47static xmlNodePtr php_sxe_iterator_fetch(
php_sxe_object *sxe, xmlNodePtr node,
int use_data);
56static void sxe_unlink_node(xmlNodePtr node)
61 if (!node->_private) {
62 php_libxml_node_free_resource(node);
78 if (nsprefix && *
ZSTR_VAL(nsprefix)) {
83 php_libxml_increment_node_ptr((php_libxml_node_object *)subnode, node,
NULL);
92 zend_string *ns_str = nsprefix ? zend_string_init((
const char *) nsprefix,
strlen((
const char *) nsprefix),
false) :
NULL;
93 node_as_zval(sxe, node,
value, itertype, name_str, ns_str, isprefix);
100static xmlNodePtr php_sxe_get_first_node_non_destructive(
php_sxe_object *sxe, xmlNodePtr node)
103 return php_sxe_reset_iterator_no_clear_iter_data(sxe,
false);
137 while (node && nodendx <=
offset) {
163 if (xmlStrEqual(node->name, raw_name)) {
175 xmlNodePtr orgnode = node;
183 node = php_sxe_get_first_node_non_destructive(sxe, node);
188 orgnode = sxe_find_element_by_name(sxe, node, sxe->
iter.
name);
192 node = orgnode->children;
197 if (xmlStrEqual(node->name, (xmlChar *)
name)) {
220 sxe = php_sxe_fetch_object(
object);
226 return &
EG(uninitialized_zval);
242 return &
EG(uninitialized_zval);
256 node = php_sxe_get_first_node_non_destructive(sxe, node);
257 attr = (xmlAttrPtr)node;
260 node = php_sxe_get_first_node_non_destructive(sxe, node);
261 attr = node ? node->properties :
NULL;
263 if (!member && node && node->parent &&
267 return &
EG(uninitialized_zval);
301 php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, node,
NULL);
305 xmlNodePtr mynode = node;
308 node = php_sxe_get_first_node_non_destructive(sxe, node);
311 if (member &&
Z_LVAL_P(member) > 0) {
315 node = sxe_get_element_by_offset(sxe,
Z_LVAL_P(member), node, &cnt);
322 if (member && cnt <
Z_LVAL_P(member)) {
325 node = xmlNewTextChild(mynode->parent, mynode->ns, mynode->name,
NULL);
337 if (member == &tmp_zv) {
338 zval_ptr_dtor_str(&tmp_zv);
354 return sxe_prop_dim_read(
object, &member, 1, 0,
type,
rv);
361 return sxe_prop_dim_read(
object,
offset, 0, 1,
type,
rv);
371 xmlNodeSetContent(node,
buffer);
382 xmlNodePtr newnode =
NULL;
395 sxe = php_sxe_fetch_object(
object);
404 return &
EG(error_zval);
419 return &
EG(error_zval);
428 zend_value_error(
"Cannot create %s with an empty name", attribs ?
"attribute" :
"element");
429 if (member == &tmp_zv) {
430 zval_ptr_dtor_str(&tmp_zv);
432 return &
EG(error_zval);
442 node = php_sxe_get_first_node_non_destructive(sxe, node);
443 attr = (xmlAttrPtr)node;
447 node = php_sxe_get_first_node_non_destructive(sxe, node);
448 attr = node ? node->properties :
NULL;
450 if (!member && node && node->parent &&
457 return &
EG(error_zval);
461 attr = node->properties;
475 value_str = zval_get_string(
value);
484 value_str =
Z_STR(zval_copy);
489 if (member == &tmp_zv) {
490 zval_ptr_dtor_str(&tmp_zv);
493 return &
EG(error_zval);
498 php_libxml_invalidate_node_list_cache_from_doc(node->doc);
531 zend_string_release(value_str);
533 return &
EG(error_zval);
539 if (member &&
Z_LVAL_P(member) > 0) {
544 newnode = sxe_get_element_by_offset(sxe,
Z_LVAL_P(member), node, &cnt);
550 node = node->children;
567 newnode = (xmlNodePtr)
attr;
570 while ((tempnode = (xmlNodePtr) newnode->children)) {
571 sxe_unlink_node(tempnode);
573 change_node_zval(newnode, value_str);
575 }
else if (counter > 1) {
578 }
else if (elements) {
581 newnode = xmlNewTextChild(mynode->parent, mynode->ns, mynode->name, value_str ? (xmlChar *)
ZSTR_VAL(value_str) :
NULL);
589 if (member && cnt <
Z_LVAL_P(member)) {
592 newnode = xmlNewTextChild(mynode->parent, mynode->ns, mynode->name, value_str ? (xmlChar *)
ZSTR_VAL(value_str) :
NULL);
594 }
else if (attribs) {
598 newnode = (xmlNodePtr)xmlNewProp(node, (xmlChar *)
Z_STRVAL_P(member), value_str ? (xmlChar *)
ZSTR_VAL(value_str) :
NULL);
603 if (member == &tmp_zv) {
604 zval_ptr_dtor_str(&tmp_zv);
610 zend_string_release(value_str);
643 cache_slot[0] = cache_slot[1] = cache_slot[2] =
NULL;
646 sxe = php_sxe_fetch_object(
object);
649 return &
EG(error_zval);
652 node = sxe_get_element_by_name(sxe, node,
name, &
type);
657 if (sxe_prop_dim_write(
object, &member,
NULL, 1, 0, &node) == &
EG(error_zval)) {
658 return &
EG(error_zval);
675static int sxe_prop_dim_exists(
zend_object *
object,
zval *member,
int check_empty,
bool elements,
bool attribs)
693 sxe = php_sxe_fetch_object(
object);
702 node = php_sxe_get_first_node_non_destructive(sxe, node);
710 node = php_sxe_get_first_node_non_destructive(sxe, node);
711 attr = (xmlAttrPtr)node;
714 node = php_sxe_get_first_node_non_destructive(sxe, node);
715 attr = node ? node->properties :
NULL;
744 if (exists && check_empty == 1 &&
745 (!
attr->children || !
attr->children->content || !
attr->children->content[0] || xmlStrEqual(
attr->children->content, (
const xmlChar *)
"0")) ) {
754 node = php_sxe_get_first_node_non_destructive(sxe, node);
756 node = sxe_get_element_by_offset(sxe,
Z_LVAL_P(member), node,
NULL);
758 node = sxe_find_element_by_name(sxe, node->children,
Z_STR_P(member));
762 if (check_empty == 1 &&
763 (!node->children || (node->children->type ==
XML_TEXT_NODE && !node->children->next &&
764 (!node->children->content || !node->children->content[0] || xmlStrEqual(node->children->content, (
const xmlChar *)
"0")))) ) {
771 if (member == &tmp_zv) {
772 zval_ptr_dtor_str(&tmp_zv);
784 return sxe_prop_dim_exists(
object, &member, check_empty, 1, 0);
789static int sxe_dimension_exists(
zend_object *
object,
zval *member,
int check_empty)
791 return sxe_prop_dim_exists(
object, member, check_empty, 0, 1);
796static void sxe_prop_dim_delete(
zend_object *
object,
zval *member,
bool elements,
bool attribs)
815 sxe = php_sxe_fetch_object(
object);
824 node = php_sxe_get_first_node_non_destructive(sxe, node);
832 node = php_sxe_get_first_node_non_destructive(sxe, node);
833 attr = (xmlAttrPtr)node;
836 node = php_sxe_get_first_node_non_destructive(sxe, node);
837 attr = node ? node->properties :
NULL;
842 php_libxml_invalidate_node_list_cache_from_doc(node->doc);
851 sxe_unlink_node((xmlNodePtr)
attr);
862 sxe_unlink_node((xmlNodePtr)
attr);
873 node = php_sxe_get_first_node_non_destructive(sxe, node);
875 node = sxe_get_element_by_offset(sxe,
Z_LVAL_P(member), node,
NULL);
877 sxe_unlink_node(node);
880 node = node->children;
887 sxe_unlink_node(node);
897 if (member == &tmp_zv) {
898 zval_ptr_dtor_str(&tmp_zv);
908 sxe_prop_dim_delete(
object, &member, 1, 0);
915 sxe_prop_dim_delete(
object,
offset, 0, 1);
919static inline zend_string *sxe_xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list,
int inLine)
921 xmlChar *tmp = xmlNodeListGetString(doc, list, inLine);
925 res = zend_string_init((
char*)tmp,
strlen((
char *)tmp), 0);
941 if (node->children && node->children->type ==
XML_TEXT_NODE && !xmlIsBlankNode(node->children)) {
942 contents = xmlNodeListGetString(node->doc, node->children, 1);
948 subnode = php_sxe_object_new(sxe_ref->
zo.
ce, sxe_ref->
fptr_count);
951 if (nsprefix && *
ZSTR_VAL(nsprefix)) {
955 php_libxml_increment_node_ptr((php_libxml_node_object *)subnode, node,
NULL);
993 bool use_iter =
false;
995 sxe = php_sxe_fetch_object(
object);
1003 node = php_sxe_get_first_node_non_destructive(sxe, node);
1005 if (node && node->type != XML_ENTITY_DECL) {
1006 attr = node->properties;
1017 node = php_sxe_get_first_node_non_destructive(sxe, node);
1023 if (sxe->
iter.
type ==
SXE_ITER_NONE || !node->children || !node->parent || node->children->next || node->children->children || node->parent->children == node->parent->last) {
1024 node = node->children;
1026 node = php_sxe_reset_iterator_no_clear_iter_data(sxe, 0);
1032 if (node->children !=
NULL || node->prev !=
NULL || node->next !=
NULL) {
1036 const xmlChar *cur = node->content;
1057 node = php_sxe_iterator_fetch(sxe, node->next, 0);
1079 bool use_iter =
false;
1081 sxe = php_sxe_fetch_object(
object);
1099 node = php_sxe_get_first_node_non_destructive(sxe, node);
1101 if (node && node->type != XML_ENTITY_DECL) {
1102 attr = node->properties;
1111 sxe_properties_add(
rv,
"@attributes",
sizeof(
"@attributes") - 1, &zattr);
1121 node = php_sxe_get_first_node_non_destructive(sxe, node);
1125 ZVAL_STR(&
value, sxe_xmlNodeListGetString(node->doc, node->children, 1));
1129 if ( sxe->
iter.
type ==
SXE_ITER_NONE || !node->children || !node->parent || !node->next || node->children->next || node->children->children || node->parent->children == node->parent->last ) {
1130 node = node->children;
1132 node = php_sxe_reset_iterator_no_clear_iter_data(sxe, 0);
1138 if (node->children !=
NULL || node->prev !=
NULL || node->next !=
NULL || xmlIsBlankNode(node)) {
1142 const xmlChar *cur = node->content;
1145 ZVAL_STR(&
value, sxe_xmlNodeListGetString(node->doc, node, 1));
1156 name = (
char *) node->name;
1160 namelen = xmlStrlen(node->name);
1171 if (
UNEXPECTED(node->type == XML_ENTITY_DECL)) {
1178 node = php_sxe_iterator_fetch(sxe, node->next, 0);
1191 sxe = php_sxe_fetch_object(
object);
1201 return sxe_get_prop_hash(
object, 0);
1208 return sxe_get_prop_hash(
object, 1);
1212static int sxe_objects_compare(
zval *object1,
zval *object2)
1252 xmlNsPtr *ns =
NULL;
1253 xmlXPathObjectPtr
retval;
1268 nodeptr = php_sxe_get_first_node_non_destructive(sxe, nodeptr);
1274 sxe->
xpath = xmlXPathNewContext((xmlDocPtr) sxe->
document->ptr);
1276 sxe->
xpath->node = nodeptr;
1278 ns = xmlGetNsList((xmlDocPtr) sxe->
document->ptr, nodeptr);
1280 while (ns[nsnbr] !=
NULL) {
1285 sxe->
xpath->namespaces = ns;
1286 sxe->
xpath->nsNr = nsnbr;
1288 retval = xmlXPathEval((xmlChar *)query, sxe->
xpath);
1292 sxe->
xpath->nsNr = 0;
1305 for (i = 0; i <
result->nodeNr; ++i) {
1306 nodeptr =
result->nodeTab[i];
1316 node_as_zval_str(sxe, nodeptr->parent, &
value,
SXE_ITER_ATTRLIST, nodeptr->name, nodeptr->ns ? BAD_CAST nodeptr->ns->href :
NULL, 0);
1328 xmlXPathFreeObject(
retval);
1336 size_t prefix_len, ns_uri_len;
1350 sxe->
xpath = xmlXPathNewContext((xmlDocPtr) sxe->
document->ptr);
1353 if (xmlXPathRegisterNs(sxe->
xpath, (xmlChar *)
prefix, (xmlChar *)ns_uri) != 0) {
1366 char *filename =
NULL;
1375 node = php_sxe_get_first_node_non_destructive(sxe, node);
1381 xmlDocPtr doc = sxe->
document->ptr;
1386 bytes = sxe->
document->handlers->dump_doc_to_file(filename, doc,
false, (
const char *) doc->encoding);
1388 bytes = sxe->
document->handlers->dump_node_to_file(filename, doc, node,
false,
NULL);
1399 result = sxe->
document->handlers->dump_doc_to_str(doc, 0, (
const char *) doc->encoding);
1401 result = sxe->
document->handlers->dump_node_to_str(doc, node,
false, (
const char *) doc->encoding);
1412#define SXE_NS_PREFIX(ns) (ns->prefix ? (char*)ns->prefix : "")
1428 char *
prefix = SXE_NS_PREFIX(ns);
1441 attr = node->properties;
1450 node = node->children;
1453 sxe_add_namespaces(sxe, node, recursive,
return_value);
1468 zend_string_release(sxe->
iter.
name);
1480 php_libxml_node_decrement_resource((php_libxml_node_object *)sxe);
1483 xmlXPathFreeContext(sxe->
xpath);
1504 node = php_sxe_get_first_node_non_destructive(sxe, node);
1508 sxe_add_namespaces(sxe, node, recursive,
return_value);
1516static void sxe_add_registered_namespaces(
php_sxe_object *sxe, xmlNodePtr node,
bool recursive,
bool include_xmlns_attributes,
zval *
return_value)
1522 while (ns !=
NULL) {
1526 if (include_xmlns_attributes) {
1529 if (
attr->ns && xmlStrEqual(
attr->ns->href, (
const xmlChar *)
"http://www.w3.org/2000/xmlns/")) {
1530 const char *
prefix =
attr->ns->prefix ? (
const char *)
attr->name :
"";
1532 xmlChar *href = php_libxml_attr_value(
attr, &free);
1541 node = node->children;
1543 sxe_add_registered_namespaces(sxe, node, recursive, include_xmlns_attributes,
return_value);
1554 bool recursive = 0, from_root = 1;
1569 node = xmlDocGetRootElement((xmlDocPtr)sxe->
document->ptr);
1579 bool include_xmlns_attributes = sxe->
document->class_type == PHP_LIBXML_CLASS_MODERN;
1582 sxe_add_registered_namespaces(sxe, node, recursive, include_xmlns_attributes,
return_value);
1605 node = php_sxe_get_first_node_non_destructive(sxe, node);
1628 node = php_sxe_get_first_node_non_destructive(sxe, node);
1630 namelen = xmlStrlen(node->name);
1652 node = php_sxe_get_first_node_non_destructive(sxe, node);
1670 size_t qname_len, value_len = 0, nsuri_len = 0;
1671 xmlNodePtr node, newnode;
1672 xmlNsPtr nsptr =
NULL;
1676 &qname, &qname_len, &
value, &value_len, &nsuri, &nsuri_len) ==
FAILURE) {
1680 if (qname_len == 0) {
1693 node = php_sxe_get_first_node_non_destructive(sxe, node);
1700 php_libxml_invalidate_node_list_cache_from_doc(node->doc);
1702 localname = xmlSplitQName2((xmlChar *)qname, &
prefix);
1703 if (localname ==
NULL) {
1704 localname = xmlStrdup((xmlChar *)qname);
1707 newnode = xmlNewChild(node,
NULL, localname, (xmlChar *)
value);
1709 if (nsuri !=
NULL) {
1710 if (nsuri_len == 0) {
1712 nsptr = xmlNewNs(newnode, (xmlChar *)nsuri,
prefix);
1714 nsptr = xmlSearchNsByHref(node->doc, node, (xmlChar *)nsuri);
1715 if (nsptr ==
NULL) {
1716 nsptr = xmlNewNs(newnode, (xmlChar *)nsuri,
prefix);
1718 newnode->ns = nsptr;
1736 size_t qname_len, value_len = 0, nsuri_len = 0;
1738 xmlAttrPtr attrp =
NULL;
1739 xmlNsPtr nsptr =
NULL;
1743 &qname, &qname_len, &
value, &value_len, &nsuri, &nsuri_len) ==
FAILURE) {
1747 if (qname_len == 0) {
1755 node = php_sxe_get_first_node_non_destructive(sxe, node);
1758 node = node->parent;
1766 localname = xmlSplitQName2((xmlChar *)qname, &
prefix);
1767 bool free_localname = localname !=
NULL;
1768 if (!free_localname) {
1769 if (nsuri_len > 0) {
1776 localname = (xmlChar *) qname;
1779 attrp = xmlHasNsProp(node, localname, (xmlChar *)nsuri);
1780 if (attrp !=
NULL && attrp->type != XML_ATTRIBUTE_DECL) {
1785 if (nsuri !=
NULL) {
1786 nsptr = xmlSearchNsByHref(node->doc, node, (xmlChar *)nsuri);
1787 if (nsptr ==
NULL) {
1788 nsptr = xmlNewNs(node, (xmlChar *)nsuri,
prefix);
1792 attrp = xmlNewNsProp(node, nsptr, localname, (xmlChar *)
value);
1795 if (free_localname) {
1838 bool free_contents =
true;
1842 sxe = php_sxe_fetch_object(readobj);
1845 node = php_sxe_get_first_node_non_destructive(sxe,
NULL);
1849 ZVAL_BOOL(writeobj, !sxe_prop_is_empty(readobj));
1855 node = php_sxe_get_first_node_non_destructive(sxe,
NULL);
1857 contents = xmlNodeListGetString((xmlDocPtr) sxe->
document->ptr, node->children, 1);
1862 php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement((xmlDocPtr) sxe->document->ptr),
NULL);
1866 if (sxe->
node && sxe->
node->node) {
1867 if (sxe->
node->node->children) {
1871 free_contents =
false;
1895 return sxe_object_cast_ex(readobj, writeobj,
type);
1915 xmlNodePtr node = php_sxe_reset_iterator_no_clear_iter_data(sxe, 0);
1920 node = php_sxe_iterator_fetch(sxe, node->next, 0);
1930 intern = php_sxe_fetch_object(
object);
1933 zend_call_method_with_0_params(
object, intern->
zo.
ce, &intern->
fptr_count,
"count", &
rv);
1942 *
count = php_sxe_count_elements_helper(intern);
2025 curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->
node)->node;
2059 node = node->children;
2092 xmlNodePtr nodep =
NULL;
2093 xmlDocPtr docp =
NULL;
2094 bool is_root_element = sxe->
node && sxe->
node->node && sxe->
node->node->parent
2099 if (is_root_element) {
2100 docp = xmlCopyDoc(sxe->
document->ptr, 1);
2101 php_libxml_increment_doc_ref((php_libxml_node_object *)clone, docp);
2120 if (is_root_element) {
2121 nodep = xmlDocGetRootElement(docp);
2123 nodep = xmlDocCopyNode(sxe->
node->node, docp, 1);
2127 php_libxml_increment_node_ptr((php_libxml_node_object *)clone, nodep,
NULL);
2134static void sxe_object_free_storage(
zend_object *
object)
2138 sxe = php_sxe_fetch_object(
object);
2142 sxe_object_free_iterxpath(sxe);
2162 parent = parent->parent;
2203 intern = php_sxe_object_new(ce, php_sxe_find_fptr_count(ce));
2230 PHP_LIBXML_SANITIZE_GLOBALS(read_file);
2232 PHP_LIBXML_RESTORE_GLOBALS(read_file);
2242 fptr_count = php_sxe_find_fptr_count(ce);
2244 sxe = php_sxe_object_new(ce, fptr_count);
2247 php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
2248 php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp),
NULL);
2284 PHP_LIBXML_SANITIZE_GLOBALS(read_memory);
2286 PHP_LIBXML_RESTORE_GLOBALS(read_memory);
2296 fptr_count = php_sxe_find_fptr_count(ce);
2298 sxe = php_sxe_object_new(ce, fptr_count);
2301 php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
2302 php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp),
NULL);
2317 bool is_url = 0, isprefix = 0;
2336 PHP_LIBXML_SANITIZE_GLOBALS(read_file_or_memory);
2338 PHP_LIBXML_RESTORE_GLOBALS(read_file_or_memory);
2345 sxe_object_free_iterxpath(sxe);
2349 php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
2350 php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp),
NULL);
2355 php_sxe_iterator_dtor,
2356 php_sxe_iterator_valid,
2357 php_sxe_iterator_current_data,
2358 php_sxe_iterator_current_key,
2359 php_sxe_iterator_move_forward,
2360 php_sxe_iterator_rewind,
2366static xmlNodePtr php_sxe_iterator_fetch(
php_sxe_object *sxe, xmlNodePtr node,
int use_data)
2384 if (match_ns(node,
prefix, isprefix)) {
2403 if (match_ns(node,
prefix, isprefix)) {
2411 if (node && use_data) {
2419static xmlNodePtr php_sxe_reset_iterator_no_clear_iter_data(
php_sxe_object *sxe,
int use_data)
2429 node = node->children;
2432 node = (xmlNodePtr) node->properties;
2437 return php_sxe_iterator_fetch(sxe, node, use_data);
2449 return php_sxe_reset_iterator_no_clear_iter_data(sxe, 1);
2514 xmlNodePtr curnode =
NULL;
2516 curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->
node)->node;
2529 xmlNodePtr node =
NULL;
2540 php_sxe_iterator_fetch(sxe, node->next, 1);
2554 php_sxe_reset_iterator(sxe);
2563 sxe = iterator->
sxe;
2565 php_sxe_reset_iterator(sxe);
2569void *simplexml_export_node(
zval *
object)
2576 return php_sxe_get_first_node_non_destructive(sxe, node);
2585 php_libxml_node_object *
object;
2586 xmlNodePtr nodep =
NULL;
2594 nodep = php_libxml_import_node(node);
2601 if (nodep->doc ==
NULL) {
2607 nodep = xmlDocGetRootElement((xmlDocPtr) nodep);
2615 fptr_count = php_sxe_find_fptr_count(ce);
2618 object = Z_LIBXML_NODE_P(node);
2620 sxe = php_sxe_object_new(ce, fptr_count);
2622 php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, nodep->doc);
2623 php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, nodep,
NULL);
2655#ifdef COMPILE_DL_SIMPLEXML
2669 sxe_object_handlers.
free_obj = sxe_object_free_storage;
2670 sxe_object_handlers.
clone_obj = sxe_object_clone;
2676 sxe_object_handlers.
has_property = sxe_property_exists;
2681 sxe_object_handlers.
compare = sxe_objects_compare;
2682 sxe_object_handlers.
cast_object = sxe_object_cast;
2686 sxe_object_handlers.
get_gc = sxe_get_gc;
2710#ifdef LIBXML_SCHEMAS_ENABLED
count(Countable|array $value, int $mode=COUNT_NORMAL)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
const XML_HTML_DOCUMENT_NODE
PHP_JSON_API size_t int options
unsigned char key[REFLECTION_KEY_LEN]
#define PHP_SIMPLEXML_VERSION
zend_module_entry simplexml_module_entry
PHP_SXE_API zend_class_entry * ce_SimpleXMLIterator
PHP_SXE_API zend_class_entry * ce_SimpleXMLElement
PHP_SXE_API zend_class_entry * sxe_get_element_class_entry(void)
PHP_SXE_API void php_sxe_move_forward_iterator(php_sxe_object *sxe)
PHP_SXE_API zend_object * sxe_object_new(zend_class_entry *ce)
PHP_SXE_API void php_sxe_rewind_iterator(php_sxe_object *sxe)
PHPAPI zend_string * php_trim(zend_string *str, const char *what, size_t what_len, int mode)
simplexml_load_file(string $filename, ?string $class_name=SimpleXMLElement::class, int $options=0, string $namespace_or_prefix="", bool $is_prefix=false)
simplexml_load_string(string $data, ?string $class_name=SimpleXMLElement::class, int $options=0, string $namespace_or_prefix="", bool $is_prefix=false)
simplexml_import_dom(object $node, ?string $class_name=SimpleXMLElement::class)
PHPAPI zend_class_entry * spl_ce_RecursiveIterator
zend_object_write_property_t write_property
zend_object_compare_t compare
zend_object_unset_property_t unset_property
zend_object_unset_dimension_t unset_dimension
zend_object_get_property_ptr_ptr_t get_property_ptr_ptr
zend_object_get_closure_t get_closure
zend_object_free_obj_t free_obj
zend_object_get_debug_info_t get_debug_info
zend_object_get_gc_t get_gc
zend_object_has_dimension_t has_dimension
zend_object_read_property_t read_property
zend_object_cast_t cast_object
zend_object_has_property_t has_property
zend_object_read_dimension_t read_dimension
zend_object_clone_obj_t clone_obj
zend_object_count_elements_t count_elements
zend_object_get_properties_t get_properties
zend_object_write_dimension_t write_dimension
const zend_object_iterator_funcs * funcs
zend_object_iterator intern
struct php_sxe_object::@314363337307304257152002232024226372106223326122 iter
zend_function * fptr_count
php_libxml_node_ptr * node
php_libxml_ref_obj * document
struct _zend_function::@236135173067030250234125302313220025134003177336 common
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API ZEND_COLD void zend_type_error(const char *format,...)
ZEND_API ZEND_COLD void zend_value_error(const char *format,...)
ZEND_API const char * zend_zval_value_name(const zval *arg)
ZEND_API ZEND_COLD void zend_argument_error(zend_class_entry *error_ce, uint32_t arg_num, const char *format,...)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API ZEND_COLD void zend_argument_type_error(uint32_t arg_num, const char *format,...)
#define RETURN_COPY_DEREF(zv)
#define RETURN_STRINGL(s, l)
#define ZVAL_STRING(z, s)
#define array_init_size(arg, size)
#define ZEND_GET_MODULE(name)
#define zend_parse_parameters_none()
#define RETVAL_EMPTY_ARRAY()
#define RETURN_NEW_STR(s)
#define RETURN_EMPTY_STRING()
#define ZVAL_STRINGL(z, s, l)
zend_string_release_ex(func->internal_function.function_name, 0)
#define GET_NODE(target, src)
ZEND_API zend_class_entry * zend_ce_exception
ZEND_API ZEND_COLD zend_object * zend_throw_exception(zend_class_entry *exception_ce, const char *message, zend_long code)
union _zend_function zend_function
ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert_new(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
#define zend_new_array(size)
ZEND_API zend_class_entry * zend_ce_countable
ZEND_API zend_class_entry * zend_ce_stringable
ZEND_API void zend_iterator_init(zend_object_iterator *iter)
struct _zend_object_iterator zend_object_iterator
struct _zend_object_iterator_funcs zend_object_iterator_funcs
struct _zend_string zend_string
struct _zend_module_dep zend_module_dep
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
#define ZEND_MOD_REQUIRED(name)
#define STANDARD_MODULE_HEADER_EX
ZEND_API zend_result zend_std_cast_object_tostring(zend_object *readobj, zval *writeobj, int type)
ZEND_API const zend_object_handlers std_object_handlers
#define ZEND_COMPARE_OBJECTS_FALLBACK(op1, op2)
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API zend_string *ZEND_FASTCALL zval_try_get_string_func(zval *op)
ZEND_API void ZEND_FASTCALL convert_to_double(zval *op)
ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op)
ZEND_API void ZEND_FASTCALL convert_to_long(zval *op)
#define ZEND_UNCOMPARABLE
#define convert_to_string(op)
#define ZEND_IGNORE_VALUE(x)
#define XtOffsetOf(s_type, field)
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
#define ZEND_SIZE_T_INT_OVFL(size)
#define ZEND_LONG_EXCEEDS_INT(zlong)
ZEND_API zend_string * zend_empty_string
#define ZSTR_EMPTY_ALLOC()
#define Z_STRVAL_P(zval_p)
#define Z_ISUNDEF_P(zval_p)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_STRLEN_P(zval_p)
#define Z_OBJCE_P(zval_p)
#define ZVAL_OBJ_COPY(z, o)
ZEND_RESULT_CODE zend_result
#define IS_ARRAY_IMMUTABLE
struct _zend_object_handlers zend_object_handlers
#define ZVAL_COPY_VALUE(z, v)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)