downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

DOMDocumentFragment> <DOMDocument::validate
[edit] Last updated: Fri, 10 Feb 2012

view this page in

DOMDocument::xinclude

(PHP 5)

DOMDocument::xinclude DOMDocument オブジェクト内の XIncludes を置換する

説明

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

このメソッドは、DOMDocument オブジェクト内の » XIncludes を置換します。

注意:

include される XML ファイルに DTD が添付されている場合は libxml2 が自動的にエンティティを解決するため、 このメソッドは予期せぬ結果を引き起こすことがあります。

パラメータ

options

libxml のパラメータ。 PHP 5.1.0 および Libxml 2.6.7 以降で使用可能です。

返り値

ドキュメント内の 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 add a note User Contributed Notes DOMDocument::xinclude
nicolas_rainardNOSPAM at yahoo dot fr 12-Jul-2007 01:56
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();

?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites