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();
?>DOMDocument::xinclude
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
DOMDocument::xinclude
Референца за `domdocument.xinclude.php` со подобрена типографија и навигација.
DOMDocument::xinclude
класата mysqli_driver
DOMDocument::xinclude — Substitutes XIncludes in a DOMDocument Object
= NULL
Заменува XIncludes во DOMDocument Објект Овој метод заменува » XIncludes
Забелешка:
во DOMDocument објект.
Вратени вредности
Поради тоа што libxml2 автоматски ги решава ентитетите, овој метод ќе произведе неочекувани резултати ако вклучената XML датотека има прикачена DTD. false Враќа број на XIncludes во документот, -1 ако некоја обработка не успеала, или
Примери
ако немало замени.
<?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="examples/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>