2011-08-15 3 views
0

私はXMLファイルを解析する必要があり、doctypeも解析する必要があります。私はXML Readerで試してみましたが、ノードタイプ10(doctype)が見つかったとき、私はそれを得ることができません。XMLReaderとdoctype

XMLReaderを使用してXMLファイルからdoctypeを抽出する方法がありますか?

編集:尋ねられるように、いくつかのサンプルコード。ダンプではなく、今のところダンプではありません。

$reader = new XMLReader(); 
$filename = 'test.xhtml'; 
$reader->open($filename); 
while($reader->read()) 
{ 
    $nodeType = $reader->nodeType; 
    $nodeName = $reader->name; 
    $nodeValue = $reader->value; 
    if($nodeType == 10) 
    { 
     echo $nodeType ."\n"; 
     echo $nodeName ."\n"; 
     echo $nodeValue ."\n"; 
     echo $reader->localName ."\n"; 
     echo $reader->namespaceURI ."\n"; 
     echo $reader->prefix ."\n"; 
     echo $reader->xmlLang ."\n"; 
     echo $reader->readString() . "\n"; 
     echo $reader->readInnerXML() . "\n"; 
     while($reader->moveToNextAttribute()) 
     { 
      echo $reader->name . "=" . $reader->value; 
     } 
} 
+0

リーダーオブジェクトのvar_dump()を試してみませんか? –

+0

@ Steve81いくつかのコードを投稿できますか –

答えて

0

あなたはDOCTYPEデータを読み取るためにDOMを使用することができます。

$doc = new DOMDocument(); 
$doc->loadXML($xmlData); 
var_dump($doc->doctype->publicId); 
var_dump($doc->doctype->systemId); 
var_dump($doc->doctype->name); 
var_dump($doc->doctype->entities); 
var_dump($doc->doctype->notations); 
0

私は見ているのにもかかわらず、多くのXMLReaderでこれを行うための方法を発見していません。ただし、DOMDocumentを使用してdoctypeを非常に簡単に読み取ってから、XMLReaderに戻って残りのストリームを読み取ることができます。例えば、XMLファイルの残りの部分を処理する前にDOCTYPEのシステムIDの一部を取得する:

$doc = new DOMDocument(); 
$doc->load($xmlfile); 
$systemId = $doc->doctype->systemId; 
unset($doc); 

// Then proceed with XMLReader: 
$reader = new XMLReader(); 
$reader->open($xmlfile); 
while($reader->read()) 
{ 
    // etc 

私は、これがすべての状況では実用的ではないかもしれないが、非常に大規模なXMLファイルを処理しながら、それは私のために働いたと仮定私はdoctypeからシステムIDを読む必要がありました。