2009-12-31 34 views
2

我想使用PHP提取XML文檔中特定節點下的所有評論。我已經嘗試了SimpleXML和DOMDocument方法,但我一直得到空白輸出。有沒有辦法從文檔中檢索評論,而不必求助於正則表達式?如何從PHP中的XML文檔中檢索評論

回答

4

SimpleXML的無法處理的意見,但DOM擴展可以。以下是如何提取所有評論的方法。您只需修改XPath表達式即可定位您想要的節點。

$doc = new DOMDocument; 
$doc->loadXML(
    '<doc> 
     <node><!-- First node --></node> 
     <node><!-- Second node --></node> 
    </doc>' 
); 

$xpath = new DOMXPath($doc); 

foreach ($xpath->query('//comment()') as $comment) 
{ 
    var_dump($comment->textContent); 
} 
+0

這完全奏效!訣竅是屬性。這是我得到空白輸出的原因。 謝謝喬希。你搖滾 – Olaseni

0

如果您使用的是SAX事件驅動解析器,解析器應該有註釋事件。例如,使用Expat時,您可以實施處理程序並將其設置爲:

void XMLCALL 
XML_SetCommentHandler(XML_Parser p, 
         XML_CommentHandler cmnt); 
+0

有時候這並不明顯。 Java的SAX DefaultHandler不會爲註釋提供回調。您必須實現一個名爲LiteralHandler的* additional *接口。因此,默認情況下不會發生回覆評論(我不知道其他語言/工具集是否如此工作) –

2

您是否有權訪問XPath API? XPath允許您使用找到評論(例如)

//comment() 
0

使用XMLReader。評論可以很容易地檢測/發現,它們是COMMENT類型的xml元素。 詳見PHP documentation: The XMLReader class

代碼示例:

$reader = new XMLReader(); 
$reader->open('filename.xml'); 
while ($reader->read()){ 
    if ($reader->nodeType == XMLReader::COMMENT) { 
     $comments[] = $reader->readOuterXml(); 
    } 
} 

而在數組$評論你將不得不在XML文件中找到的所有評論。