DomDocument::xinclude
(PHP 5)
DomDocument::xinclude — Substitutes XIncludes in a DomDocument Object
Описание
int DomDocument::xinclude
( void
)
This function substitutes » XIncludes in a DomDocument object.
Пример #1 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();
?>
Результат выполнения данного примера:
<?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>
[an error occurred while processing the directive]
- 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
Коментарии
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.
I had to do things a bit differently to use xincludes (also following the example above only included a part of the XML):
<?php
$xml = '<?xml version="1.0" encoding="utf-8"?>
<site xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="home.xml#xpointer(/site/*)">
<xi:fallback>
<error>Error: home.xml not found or invalid!</error>
</xi:fallback>
</xi:include>
<xi:include href="services.xml#xpointer(/site/*)">
<xi:fallback>
<error>Error: services.xml not found or invalid!</error>
</xi:fallback>
</xi:include>
<xi:include href="about.xml#xpointer(/site/*)">
<xi:fallback>
<error>Error: about.xml not found or invalid!</error>
</xi:fallback>
</xi:include>
<xi:include href="contact.xml#xpointer(/site/*)">
<xi:fallback>
<error>Error: contact.xml not found or invalid!</error>
</xi:fallback>
</xi:include>
</site>';
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xml);
$xmlDoc->xinclude();
echo $xmlDoc->saveXML();
?>
The xinclude method is defined as: int DomDocument->xinclude ( void ). However you can pass options to this method. If your xincluded file contains entities, these entities will not be resolved simply by setting the substituteEntities property of the DomDocument to "true". You must pass in options to the xinclude function. For example:
<?php
$doc = new DOMDocument();
//doc has entities, substitute them
$doc->substituteEntities = true;
$source = "/path/to/file.xml";
$doc->load($source);
//do this to resolve entities in an xincluded file
$options = LIBXML_NOENT;
$doc->xinclude($options);
...
?>