2011-04-06 108 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