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のように、アイテムの数を数えて 1 つずつ表示するにはどうすればよいですか?

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を使用するのは貪欲です。さらに、1 つまたは 2 つのみが必要な場合でも、ドキュメントの各ノードをインスタンス化します。

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 に答える