2012-10-09 46 views
0

我使用php和xmlreader。我正在嘗試使用include語句讀取文件。看起來,xmlreader不知道如何處理include,只是將其視爲「正常」元素。讀者目前看起來像這樣。php與xmlreader - 你如何使xi:包括工作?

if (!$reader->open($file)) { 
    die("Failed to open '.xml'"); 
} 
while($reader->read()) { 
echo $reader->nodeType . " " . $reader->name . "<br/>"; 
} 
$reader->close(); 

頂級XML看起來是這樣的:

<?xml version="1.0" ?> 

<?xml-stylesheet type="text/xsl" href="AdvDisad.xsl"?> 

<!DOCTYPE kaw [ <!ENTITY brvbar "|"> ]> 

<mydata xmlns:xi="http://www.w3.org/2001/XInclude"> 
<xi:include href="adv.xml"/> 
</mydata> 

輸出是這樣的:

7 xml-stylesheet 
10 kaw 
1 mydata 
14 #text 
1 xi:include 
14 #text 
15 mydata 

,你可以看到,在喜不被解釋爲任何特殊。我需要自己處理嗎?如果是這樣,實體是否會被傳遞?這是我首先打擾包裝的原因。

+0

是什麼xi假設todo?你只是要求讀者閱讀,而且這樣做。 – Ibu

+0

我的理解(可能是錯誤的)從這個鏈接:http://www.w3.org/TR/xinclude/#XLink;讓我覺得xi會導致文件被包含在內。我想知道是否有需要添加到XMLreader的東西,但我還沒有找到它。 – kdubs

回答

1

其中LIBXML options的可以傳遞給XMLReader的指示它將替代XIncludes:

$reader->open($file, null, LIBXML_XINCLUDE); 

PHP的DOM擴展也可與xinclude方法 「手動」,解決XIncludes:

$doc = new DomDocument; 
$doc->load($file); 
$doc->xinclude(); 
+0

謝謝。那解決了這個問題。我在創作時尋找選擇,而不是開放時間。 – kdubs