我正在使用php和xmlreader。我正在尝试读取包含include语句的文件。似乎xmlreader不知道如何处理include,只是把它当作“普通”元素。读者现在看起来像这样。
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
如你所见,xi并没有被解释为特别的。我需要自己处理吗?如果是这样,实体是否会被传递?这是我首先打扰包含的原因。
答案 0 :(得分:1)
您可以传递给XMLReader的LIBXML
options之一指示它替换XIncludes:
$reader->open($file, null, LIBXML_XINCLUDE);
PHP的DOM扩展还可以使用xinclude
方法“手动”解析XIncludes:
$doc = new DomDocument;
$doc->load($file);
$doc->xinclude();