|
domxml_xmltree
Creates a tree of PHP objects from an XML document
(PHP 4 >= 4.2.0)
The function parses the XML document in str and returns a tree PHP objects as the parsed document. This function is isolated from the other functions, which means you cannot access the tree with any of the other functions. Modifying it, for example by adding nodes, makes no sense since there is currently no way to dump it as an XML file. However this function may be valuable if you want to read a file and investigate the content. Code Examples / Notes » domxml_xmltreejeroen dot s
You can modify the returned DomDocument, and dump it as an XML file by using DomDocument->dump_mem() or DomDocument->dump_file(). colin
This is a genuinely useful function, however, as with any DOM-based markup parser, be mindful of the size of the XML document you are parsing. Representing very large XML files as object structures requires *a lot* of memory and processing, and may even crash your server (which is what happened to my Apache when I tried parsing a 2MB XML file using this function, just for fun... ;).
nutbar
Same concept as previous function, except uses node names as key items in the arrays. This function may prove a bit more useful than the previous one: function domxml_xmlarray($branch) { $object = array(); $objptr = &$object; $branch = $branch->first_child(); while ($branch) { if (!($branch->is_blank_node())) { switch ($branch->node_type()) { case XML_TEXT_NODE: { $objptr['cdata'] = $branch->node_value(); break; } case XML_ELEMENT_NODE: { $objptr = &$object[$branch->node_name()][]; break; } } if ($branch->has_child_nodes()) { $objptr = array_merge($objptr, domxml_xmlarray($branch)); } } $branch = $branch->next_sibling(); } return $object; } Usage is identical to the previous function. 23-feb-2005 02:38
Replacing line 10 works well, but replacing line 15 causes some errors. I have a tree like: <admin> <user level="0"> <username>admin</username> <password>admin_pass</password> </user> <user level="1"> <username>moder</username> <password>moder_pass</password> </user> </admin> when I remove those brackets only the last <user> is included into array. In this example it would be <user level="1"> <username>moder</username> <password>juozux</password> </user> no user name admin, etc. p.s. I don't store passwords in plain text in xml, that was just an example :)) alan71
In the function of nutbar, try to replace line 10 by $objptr = $branch->node_value(); and line 15 by : $objptr = &$object[$branch->node_name()]; //without the '[]' it makes an array much more easier to read. Previously, it produces an array like $MyArray[ROOT][0][BRANCH1][0][BRANCH2][0][5], and now $MyArray[ROOT][BRANCH1][BRANCH2][5]. There isn't bugs in the example I use, and I haven't tested with arguments. I think that an implementation of a part of nospam's code is enough. I hope this will help! samc a t rampantlabs dot net
Forgive me if I am mistaken, but the whole point of including the "useless white space" is because of the existence of mixed types, for example: the schema def: <xsd:element name="paragraph"> <xsd:complexType mixed="true"> <xsd:choice> <xsd:element ref="link" /> <xsd:element ref="emphasisText" /> </xsd:choice> </xsd:complexType> </xsd:element> and an example: <paragraph>This here is a paragraph. You'll notice that it has within it a bunch of text punctuated by other <emphasisText>tags</emphasisText> and it is <link target="me.html>my</url> understanding that the only way to read this text is by reading the tagless nodes that your functions strip.</paragraph> I could be way off though... nospam
Consider the following revisions for including attributes into the array. function domxml_xmlarray ($branch) { $object = Array (); $objptr =& $object; $branch = $branch->first_child (); while ($branch) { if (!($branch->is_blank_node())) { switch ($branch->node_type()) { case XML_TEXT_NODE: { $objptr['cdata'] = $branch->node_value (); break; } case XML_ELEMENT_NODE: { $objptr =& $object[$branch->node_name ()][]; if ($branch->has_attributes ()) { $attributes = $branch->attributes (); if (!is_array ($attributes)) { break; } foreach ($attributes as $index => $domobj) { $objptr[$index] = $objptr[$domobj->name] = $domobj->value; } } break; } } if ($branch->has_child_nodes ()) { $objptr = array_merge ($objptr, domxml_xmlarray ($branch)); } } $branch = $branch->next_sibling (); } return $object; } |
Change LanguageDomAttribute->name DomAttribute->set_value DomAttribute->specified DomAttribute->value DomDocument->add_root DomDocument->create_attribute DomDocument->create_cdata_section DomDocument->create_comment DomDocument->create_element_ns DomDocument->create_element DomDocument->create_entity_reference DomDocument->create_processing_instruction DomDocument->create_text_node DomDocument->doctype DomDocument->document_element DomDocument->dump_file DomDocument->dump_mem DomDocument->get_element_by_id DomDocument->get_elements_by_tagname DomDocument->html_dump_mem DomDocument->xinclude DomDocumentType->entities() DomDocumentType->internal_subset() DomDocumentType->name() DomDocumentType->notations() DomDocumentType->public_id() DomDocumentType->system_id() DomElement->get_attribute_node() DomElement->get_attribute() DomElement->get_elements_by_tagname() DomElement->has_attribute() DomElement->remove_attribute() DomElement->set_attribute_node() DomElement->set_attribute() DomElement->tagname() DomNode->add_namespace DomNode->append_child DomNode->append_sibling DomNode->attributes DomNode->child_nodes DomNode->clone_node DomNode->dump_node DomNode->first_child DomNode->get_content DomNode->has_attributes DomNode->has_child_nodes DomNode->insert_before DomNode->is_blank_node DomNode->last_child DomNode->next_sibling DomNode->node_name DomNode->node_type DomNode->node_value DomNode->owner_document DomNode->parent_node DomNode->prefix DomNode->previous_sibling DomNode->remove_child DomNode->replace_child DomNode->replace_node DomNode->set_content DomNode->set_name DomNode->set_namespace DomNode->unlink_node DomProcessingInstruction->data DomProcessingInstruction->target DomXsltStylesheet->process() DomXsltStylesheet->result_dump_file() DomXsltStylesheet->result_dump_mem() domxml_new_doc domxml_open_file domxml_open_mem domxml_version domxml_xmltree domxml_xslt_stylesheet_doc domxml_xslt_stylesheet_file domxml_xslt_stylesheet domxml_xslt_version xpath_eval_expression xpath_eval xpath_new_context xpath_register_ns_auto xpath_register_ns xptr_eval xptr_new_context |