[英]Get children of document element through php domdocument parser
好的,这是一个非常常见的 xml 解析方法,获取子节点,但它对我来说不起作用......
我不能在这里得到我的根元素的childNodes数组,但我可以从任何其他节点得到它,当他们有了孩子,这不是一个问题。 每当我遇到从这个文档元素获取 childnodes 时,我似乎只能得到第一个孩子。
我需要从文档元素中获取所有第一级节点..
$xdoc=createDOMDocument($file);
$all_children= $xdoc->documentElement->childNodes;
echo count($all_children);
function createDOMDocument($file){
$xdoc = new DOMDocument();
$xdoc->formatOutput = true;
$xdoc->preserveWhiteSpace = false;
$xdoc->load($file);
return $xdoc;
}
但这只会输出“1”,它不会找到所有节点,当我尝试输出它时,它总是在第一个节点处停止。 这对我来说毫无意义。
它在下面找到的唯一节点是:
<title>some title</title>
如果我删除该节点,它会找到 topicmeta 等等,但永远不会将每个节点都放入我需要的数组中。
这是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<map title="mytitle" xml:lang="en-us">
<title>some title</title>
<topicmeta>
<prodinfo>
<prodname>a product</prodname>
<vrmlist>
<vrm version="8.5"/>
</vrmlist>
<platform/>
</prodinfo>
</topicmeta>
<topichead navtitle="cat1" id="topichead4f53aeb751c875.38130575">
<topichead navtitle="another topic"/>
</topichead>
<topichead navtitle="cat2" id="topichead4f53aeb3596990.18552413"/>
<topichead navtitle="cat3" id="topichead4f52fd157487f9.21599660"/>
</map>
这对我有用...
$xml = new DOMDocument();
$xml->load('read.xml');
$root = $xml->documentElement;
foreach($root->childNodes as $node){
print $node->nodeName.' - '.$node->nodeValue;
}
我确实必须将<topichead navtitle="cat3" id="topichead4f52fd157487f9.21599660">
更改为<topichead navtitle="cat3" id="topichead4f52fd157487f9.21599660" />
尽管我在评论中提到了一些事情,但我想我明白你想要做什么。
这里的问题是count()
不会起作用。 我不确定这是否是它使用的 Traversable 接口的限制,或者是否是 DOM 类的一般怪癖。 你要找的是:
$all_children = $xdoc->documentElement->childNodes;
echo $all_children->length;
使用->childNodes
返回一个DOMNodeList 。 如有疑问,您可以get_class()
您的变量以查看它是什么类型的对象,然后在 php.net 上查找。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.