【问题标题】:Get instance of nodes by their name in SimpleXML (PHP)在 SimpleXML (PHP) 中按名称获取节点实例
【发布时间】:2011-12-13 16:05:48
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays simplexml instance nodes


    【解决方案1】:

    是的,使用 xpath

    $xml->xpath('//div');

    这里的 $xml 是你的 SimpleXML 对象。

    在本例中,您将获得所有 'div' 元素的数组

    【讨论】:

    • 谢谢!我以前尝试过,但是(为什么永远)它不起作用。现在我又试了一次,它起作用了。可能是缓存问题。 :S
    • 您可能只使用了 1 个正斜杠?您需要使用 2 // 来查找所有元素。
    【解决方案2】:
      $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) ...

    【讨论】:

      【解决方案3】:

      仅限DOMDocument::getElementsByTagName
      不过,你可以import/export SimpleXML into DOMDocument,
      或者干脆使用 DOMDocument 来解析 XML。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-23
        • 2010-11-11
        • 2011-08-01
        • 1970-01-01
        • 2013-07-08
        • 2014-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多