在SimpleXML (PHP)中按名称获取节点实例


Get instance of nodes by their name in SimpleXML (PHP)

我想在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>