simplexml如何处理带前缀的元素?

时间:2012-03-22 14:52:33

标签: php simplexml

应用程序中的

simplexml已将rss feed转换为对象,并且元素非常容易引用。是前缀元素(例如<this:that>)引用与对象中的非前缀元素($item->this)相同的方式。

我在php.net手册中找不到任何信息。

2 个答案:

答案 0 :(得分:2)

不完全。当您对表示命名空间XML的对象执行print_r()var_dump()时,您会注意到所有命名空间节点都缺失。有几种方法可以获得命名空间节点。一种方法是将registerXPathNamespace()xpath()结合使用:

$xml = simplexml_load_file('some/namespaced/xml/file.xml');
$xml->registerXPathNamespace('prefix', 'http://Namespace/Uri/Here');
$xml->xpath('//prefix:node'); //get all <prefix:node> XML nodes.

另一种方法是使用children()来获取子节点:

$xml = simplexml_load_file('some/namespaced/xml/file.xml');
$xml->children('prefix', true); //get all nodes with the 'prefix' prefix that are direct descendants of the root node.
$xml->someNode->children('blah', true); //get all nodes with the 'blah' prefix that are direct descendants of <someNode>

答案 1 :(得分:0)

您要找的是registerXPathNamespace()。您注册每个命名空间,然后就可以像平常一样使用每个节点。