【问题标题】:looping through elements sub-elements循环遍历元素子元素
【发布时间】:2012-10-06 23:43:06
【问题描述】:

我正在尝试从一个看起来像的结构中提取数据 http://chris.photobooks.com/xml/default.htm?state=8T

使用以下函数,我试图遍历每个产品标签

$dom = new DOMDocument;
$dom->loadXML($resp);
$xpath = new DOMXPath($dom);
$xpath->registerNamespace('ns2', 'http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd');
$xpath->registerNamespace('a', 'http://mws.amazonservices.com/schema/Products/2011-10-01');

foreach($xpath->query('//a:Product') as $product){
    echo $product->query('//ns2:ItemAttributes/ns2:Author')->item(0)->nodeValue
}

我现在意识到这是从 for 循环中提取数据的错误方法,但正确的方法是什么?

【问题讨论】:

    标签: php xml xpath simplexml


    【解决方案1】:

    我想你想要

    foreach($xpath->query('//a:Product') as $product){
        echo $xpath->query('.//ns2:ItemAttributes/ns2:Author', $product)->item(0)->textContent
    }
    

    【讨论】:

    • 我希望我之前可以尝试过,但我只是通过使用 str_replace() 来替换所有命名空间,这是一种廉价而肮脏的方式。还是谢谢
    【解决方案2】:

    如果你需要特定的标签,你可以这样做:

    $dom = new DOMDocument;
    $dom->loadXML($resp);
    
    foreach($dom->getElementsByTagName("Product") as $product){
        echo $product->getElementsByTagName("Author")->item(0)->nodeValue."<br />";
    }
    

    否则(如果您需要整个数据),社区制作的解决方案可以将整个 XML 转换为简单的数组/对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多