DOMDocument::xinclude

(No version information available, might be only in CVS)

DOMDocument::xinclude — Substitutes XIncludes in a DOMDocument Object

Описание

int DOMDocument::xinclude ([ int $options ] )

This method substitutes » XIncludes in a DOMDocument object.

Замечание: Due to libxml2 automatically resolving entities, this method will produce unexpected results if the included XML file have an attached DTD.

Список параметров

options

libxml parameters. Available since PHP 5.1.0 and Libxml 2.6.7.

Возвращаемые значения

Returns the number of XIncludes in the document.

Примеры

Пример #1 DOMDocument->xinclude() example

<?php

$xml 
= <<<EOD
<?xml version="1.0" ?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
 <title>Books of the other guy..</title>
 <para>
  <xi:include href="book.xml">
   <xi:fallback>
    <error>xinclude: book.xml not found</error>
   </xi:fallback>
  </xi:include>
 </para>
</chapter>
EOD;

$dom = new DOMDocument;

// let's have a nice output
$dom->preserveWhiteSpace false;
$dom->formatOutput true;

// load the XML string defined above
$dom->loadXML($xml);

// substitute xincludes
$dom->xinclude();

echo 
$dom->saveXML();

?>

Результатом выполнения данного примера будет что-то подобное:

<?xml version="1.0"?>
<chapter xmlns:xi="http://www.w3.org/2001/XInclude">
  <title>Books of the other guy..</title>
  <para>
    <row xml:base="/home/didou/book.xml">
       <entry>The Grapes of Wrath</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>0140186409</entry>
      </row>
    <row xml:base="/home/didou/book.xml">
       <entry>The Pearl</entry>
       <entry>John Steinbeck</entry>
       <entry>en</entry>
       <entry>014017737X</entry>
      </row>
    <row xml:base="/home/didou/book.xml">
       <entry>Samarcande</entry>
       <entry>Amine Maalouf</entry>
       <entry>fr</entry>
       <entry>2253051209</entry>
      </row>
  </para>
</chapter>

Коментарии

If you use the loadXML() method instead of the load() one (let's say, to process the XML string before loading and parsing it), you will have problems with xinclude(), because the parser will not know where to find the files to include.
Using chdir() before xinclude() will not help.

The solution is to set the documentURI property of the DOMDocument object accordingly to it's original filename, and everything will work fine !

<?php

$xml 
file_get_contents($file);
$xml do_something_with($xml);

$doc = new DOMDocument;
$doc->documentURI $file;
$doc->loadXML($xml);
$doc->xinclude();

?>
2007-07-12 07:56:14
http://php5.kiev.ua/manual/ru/domdocument.xinclude.html

    Поддержать сайт на родительском проекте КГБ