Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : DOM XML Functions : domxml_xmltree

domxml_xmltree

Creates a tree of PHP objects from an XML document (PHP 4 >= 4.2.0)
DomDocument domxml_xmltree ( string str )

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.

Parameters

str

The contents of the XML file.

Return Values

Returns a tree of Dom objects starting by a DomDocument.

Code Examples / Notes » domxml_xmltree

jeroen 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 Language


Follow Navioo On Twitter
DomAttribute->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
eXTReMe Tracker