使用php计算xml中的项目数

时间:2012-08-10 12:27:09

标签: php xml parsing dom count

我必须解析看起来像这样的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

1 个答案:

答案 0 :(得分: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 methode和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);