2011-04-06 107 views
1

我從客戶那裏得到了一個示例XML字符串,我想將其轉換爲DOMDocument。我似乎無法得到正確的第一個節點....如何將XML字符串轉換爲PHP中的DOMDocument?

字符串看起來像這樣;

<ev:Events xmlns:ev="xsdEvents" xsi:schemaLocation="xsdEvents [url]" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Node> 
     <OtherNode>value</OtherNode> 
    </Node> 
</ev:Events> 

我該如何通過PHP中的DOMDocument將其設置爲正確的方式?

+0

究竟是你想做些什麼? – netcoder 2011-04-06 15:37:23

+1

答案是使用['DOMDocument :: loadXml()'](http://de3.php.net/manual/en/domdocument.loadxml.php),但我拒絕給出答案,因爲它應該是在谷歌的第一件事情,並在SO上有一個巨大的DOM使用示例。如果還有其他問題,請澄清一下您的問題,而不僅僅是「如何使用DOMDocument加載XML」。 – Gordon 2011-04-06 15:46:38

+2

我同意@Gordon。我認爲我們不應該重複衆所周知的官方文件。我可能是錯的......重新標記,因爲它與XSLT無關。 – 2011-04-06 17:07:27

回答

4

好吧,將XML字符串加載到DOMDocument對象並不那麼困難 - 你只需要使用DOMDocument::loadXML()

例如,在你的情況,你會使用:

$string = <<<XML 
<ev:Events xmlns:ev="xsdEvents" xsi:schemaLocation="xsdEvents [url]" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Node> 
     <OtherNode>value</OtherNode> 
    </Node> 
</ev:Events> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXML($string); 


然後,訪問您的數據僅僅是一個使用相關DOM方法的問題。

例如,要提取您<OtherNode>節點的值,你可以使用:

$items = $dom->getElementsByTagName('OtherNode'); 
if ($items->length > 0) { 
    var_dump($items->item(0)->nodeValue); 
} 
+0

感謝您的回覆,但的確看起來我沒有正確解釋我的(第一個)問題。 我收到的文件只是一個例子。我想要做的是構建與文件相同的結構,但使用DOMDocument。 – Ruben 2011-04-07 10:05:25