0

私はxmlreaderでphpを使用しています。includeステートメントを含むファイルを読み込もうとしています。xmlreaderはインクルードをどう処理するかを知らず、単に「通常の」要素として扱うようです。現時点では、読者はこのように見えます。

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は特別なものとして解釈されません。自分で処理する必要がありますか?もしそうなら、エンティティは渡されますか?そもそもインクルードに悩むのは私の理由です。

4

1 に答える 1

1

XMLReaderに渡すことができるLIBXMLオプションの1つは、 XIncludesを置き換えるように指示します。

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

xincludePHPのDOM拡張機能は、次の方法でXIncludesを「手動で」解決することもできます。

$doc = new DomDocument;
$doc->load($file);
$doc->xinclude();
于 2012-10-09T03:00:49.833 に答える