2011-08-15 49 views
0

我需要解析一個XML文件,我還需要解析文檔類型。我試過用XML Reader,但是當我發現nodetype 10(doctype)時,我無法獲得它的價值。XMLReader和文檔類型

有一種方法可以從XML文件中使用XMLReader提取文檔類型?

編輯:如問,一些示例代碼。然而,現在,這不過是一個轉儲。

$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

您可以使用DOM來讀取DOCTYPE數據:

$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輕鬆讀取文檔類型,然後恢復到XMLReader以讀取其餘的流。例如,爲了獲得文檔類型的系統ID部分處理XML文件的其餘部分之前:

$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文件爲此我需要從文檔類型中讀取系統ID。