DOMDocument::xinclude
(PHP 5, PHP 7, PHP 8)
DOMDocument::xinclude — DOMDocument オブジェクト内の XIncludes を置換する
説明
このメソッドは、DOMDocument オブジェクト内の » XIncludes を置換します。
注意:
include される XML ファイルに DTD が添付されている場合は libxml2 が自動的にエンティティを解決するため、 このメソッドは予期せぬ結果を引き起こすことがあります。
戻り値
ドキュメント内の XIncludes の数を返します。
何かの処理に失敗した場合は -1、
置換が発生しなかった場合は false
を返します。
例
例1 DOMDocument::xinclude() の例
<?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;
// 見た目をきれいにします
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
// 上で定義した XML 文字列を読み込みます
$dom->loadXML($xml);
// 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>
+add a note
User Contributed Notes 1 note
nicolas_rainardNOSPAM at yahoo dot fr ¶
17 years ago
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();
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google