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

时间:2011-12-13 16:05:48

标签: php arrays simplexml instance nodes

我想在SimpleXML对象中搜索具有相同节点名称的节点,无论它们嵌套的深度如何,并将它们的实例创建为数组。

在HTML DOM中,我可以使用getElementsByTagName()来使用JavaScript。有没有办法在PHP中做到这一点?

3 个答案:

答案 0 :(得分:3)

是使用xpath

$ XML->的xpath( '// DIV');

这里$ xml是你的SimpleXML对象。

在这个例子中,你将获得所有'div'元素的数组

答案 1 :(得分:1)

  $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)

答案 2 :(得分:0)

仅限于DOMDocument::getElementsByTagName
但是,你可以import/export SimpleXML into DOMDocument
或者只是使用DOMDocument来解析XML。

关于Xpath的另一个答案,
它将返回节点的重复,如果你有类似的东西: -

<div><div>1</div></div>