1

我必须解析如下所示的 xml 文件:http: //goo.gl/QQirq

我如何计算这个 xml 中的项目/记录的数量 - 'item' 我的意思是 'productItem' 元素,即示例 xml 中有 5 个项目。我在解析 xml 时没有指定标签名称“productItem”,所以我无法计算“productItem”的出现次数。这是我的代码:

        <?php
$doc = new DOMDocument();
$doc->load("test.xml");
$xpath = new DOMXpath( $doc );
$nodes = $xpath->query( '//*| //@*' );
$nodeNames = array();
foreach( $nodes as $node )
{
    $nodeNames = $node->nodeName;
    $name=$node->nodeName;
    $value=$node->nodeValue;
    echo ''.$name.':'.$value.'<br>';
    }

?> 

我怎样才能计算项目的数量并一个一个地显示它们,理想情况下是这样的:http: //goo.gl/O1FI8

4

1 回答 1

1

为什么不使用 DOMDocument::getElementsByTagName?

//get the number of product items
echo $doc->getElementsByTagName('productitem')->length;
 //traverse the collection of productitem
foreach($doc->getElementsByTagName('productitem') as $element){
  //$element is a DOMElement
  $nodeNames = $element->nodeName;
  $name=$element->nodeName;
  $value=$element->nodeValue;
  echo ''.$name.':'.$value.'<br>';
}

当你想遍历你的文档时,使用 XPath 只是贪心而已。此外,即使您只需要一个或两个,您也会实例化文档的每个节点。

您可以使用 hasChildNodes 方法和 childNodes 属性来遍历您的文档

function searchInNode(DOMNode $node){

     if(isGoodNode($node)){//if your node is good according to your database
         mapTheNode($node);
     }
     if($node->hasChildNodes()){
         foreach($node->childNodes as $nodes){
             searchInNode($nodes);
         }
     }
}
searchInNode($domdocument);    
于 2012-08-10T12:43:32.863 回答