【发布时间】:2011-12-13 16:05:48
【问题描述】:
我想在 SimpleXML 对象中搜索具有相同节点名称的节点,无论它们嵌套多深,并将它们的实例创建为数组。
在 HTML DOM 中,我可以通过 getElementsByTagName() 使用 JavaScript 来做到这一点。有没有办法在 PHP 中做到这一点?
【问题讨论】:
标签: php arrays simplexml instance nodes
我想在 SimpleXML 对象中搜索具有相同节点名称的节点,无论它们嵌套多深,并将它们的实例创建为数组。
在 HTML DOM 中,我可以通过 getElementsByTagName() 使用 JavaScript 来做到这一点。有没有办法在 PHP 中做到这一点?
【问题讨论】:
标签: php arrays simplexml instance nodes
是的,使用 xpath
$xml->xpath('//div');
这里的 $xml 是你的 SimpleXML 对象。
在本例中,您将获得所有 'div' 元素的数组
【讨论】:
$fname = dirname(__FILE__) . '\\xml\\crRoll.xml';
$dom = new DOMDocument;
$dom->load($fname, LIBXML_DTDLOAD|LIBXML_DTDATTR);
$root = $dom->documentElement;
$xpath = new DOMXpath($dom);
$xpath->registerNamespace('cr', "http://www.w3.org/1999/xhtml");
$candidateNodes = $xpath->query("//cr:break");
foreach ($candidateNodes as $child) {
$max = $child->getAttribute('tstamp');
}
这会使用 XPath 找到所有 BREAK 节点 (tstamp attr) ...
【讨论】:
仅限DOMDocument::getElementsByTagName,
不过,你可以import/export SimpleXML into DOMDocument,
或者干脆使用 DOMDocument 来解析 XML。
另一个关于 Xpath 的回答,
如果你有类似的东西,它将返回节点的重复:-
<div><div>1</div></div>
【讨论】: