我想在SimpleXML对象中搜索具有相同节点名称的节点,无论它们嵌套有多深,并创建它们的实例作为数组。
在HTML DOM中,我可以通过使用getElementsByTagName()
来使用JavaScript。PHP中也能做到吗?
是使用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,
但是,您可以将SimpleXML导入/导出到DOMDocument,
或者直接使用DOMDocument来解析XML。
另一个关于Xpath的答案是
它将返回节点的副本,如果您有以下内容:-
<div><div>1</div></div>