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



PHP : Function Reference : DOM XML Functions : DomDocument->xinclude

DomDocument->xinclude

Substitutes XIncludes in a DomDocument Object ()
int DomDocument->xinclude ( )

Example 554. Substituting Xincludes

<?php

// include.xml contains :
// <child>test</child>

$xml = '<?xml version="1.0"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
 <xi:include href="include.xml">
   <xi:fallback>
     <error>xinclude: include.xml not found</error>
   </xi:fallback>
 </xi:include>
</root>'
;

$domxml = domxml_open_mem($xml);
$domxml->xinclude();

echo
$domxml->dump_mem();

?>

The above example will output:

<?xml version="1.0"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
 <child>test</child>
</root>

If include.xml doesn't exist, you'll see:

<?xml version="1.0"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
 <error>xinclude:dom.xml not found</error>
</root>

Related Examples ( Source code ) » domdocument xinclude



Code Examples / Notes » domdocument xinclude

amm

xml Include using xpointer to include specific part of another xml doc
Main xml file (or string):
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
  <optional>
     <xi:include href="include.xml#xpointer(/parts/*)" parse="xml">
        <xi:fallback>
           <error>Error.</error>
        </xi:fallback>
     </xi:include>
  </optional>
  <blah>blah</blah>
  <blah>blah</blah>
</root>
Include.xml file (or string:
<?xml version="1.0" encoding="utf-8"?>
<parts>
  <part>part one</part>
  <part>part two</part>
  <part>part three</part>
</parts>
href="include.xml#xpointer(/parts/*)"
will include all <part> tags but NOT <parts>
href="include.xml#xpointer(/parts/part[1])"
will include <part>part one</part>
simple but very usefull.


www dot spam

Tips for anyone trying to use nested <xi:include /> blocks:
- Multiple calls to DOMDocument::xinclude() are required to parse each level of include blocks, you can either call xinclude() a fixed amount of times (enough to cover your needs), or you can check for leftover <xi:include /> blocks after each call to DOMDocument::xinclude() to see if you need to call it again.
- If you are going to use an <xi:include /> block in an included file, you must define the "xi" namespace in the included file where another include block exists, the namespace definition will not carry through from the first xml file
eg.
==========
a.xml (xi definition needed)
----------
<?xml version="1.0"?>
<a xmlns:xi="http://www.w3.org/2001/XInclude">
   <xi:include href="includes/b.xml" />
</a>
==========
==========
b.xml (xi definition needed)
----------
<?xml version="1.0"?>
<b xmlns:xi="http://www.w3.org/2001/XInclude">
   <xi:include href="c.xml" />
</b>
==========
==========
c.xml (xi definition not needed)
----------
<?xml version="1.0"?>
<c>whatever</c>
==========
- Futher to my example above, if you are including an xml file that has another include inside it, the href "base" url will be taken from the 2nd file. In the above example, "c.xml" is actually in the same directory as "b.xml", whereas "a.xml" is in the directory above, but because b is calling c, the "base" directory is seen as "includes/"
Another tip not related to nested xincludes, but simply xinclude stuff in general:
I wanted to turn this...
<a>
   <b />
   <c />
   <d />
   <e />
</a>
...into this...
<a>
   <xi:include file="bcde.xml" />
</a>
...but then bcde.xml would have looked like this...
<b />
<c />
<d />
<e />
...which is not valid xml and was causing an error. So just remember that included files need to be valid and may still only have one root element.
These are from my experiences with PHP5.0.1, I'm not a DOMXML expert at all. Enjoy!


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