使用php计算xml中的项目数

使用php计算xml中的项目数,php,xml,parsing,dom,count,Php,Xml,Parsing,Dom,Count,我必须解析如下所示的xml文件: 我如何计算这个xml中的项目/记录的数量?我所说的“项目”是指一个“productItem”元素,即示例xml中有5个项目。在解析xml时,我没有指定标记名“productItem”,因此无法计算“productItem”的出现次数。以下是我的代码: <?php $doc = new DOMDocument(); $doc->load("test.xml"); $xpath = new DOMXpath( $doc ); $nodes

我必须解析如下所示的xml文件:

我如何计算这个xml中的项目/记录的数量?我所说的“项目”是指一个“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>';
    }

?> 


我如何计算项目的数量并逐个显示它们,理想情况下是这样的:?

为什么不使用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>';
}

为什么不使用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>';
}

我有来自许多商家/平台的xml提要,不想硬编码,最终为每个商家/平台提供一个解析器。我需要获取文件并选择要映射的字段。它是一种“泛型”解析器,问题是您的“泛型解析器”实际上是文档中每个节点的列表。目前,我还没有任何标准可以帮助你。您说您不知道节点名称,那么您知道要映射哪个节点的标准是什么?是的,它是文档中每个节点的列表。首先,我想显示所有节点以查看哪些节点包含我需要的信息,然后将它们与我数据库中的字段相匹配。我的问题是:是否有一种方法可以在不指定标记名的情况下确定“productItem”元素是我要查找的“items”?确定。如果只想遍历文档,可以使用SimpleXmlIterator或hasChildNodes()方法和childNodes属性。我编辑我的答案谢谢你的回答!我已经找到了一个脚本,大约做我需要的。不过,在映射每个节点时,您的函数会有所帮助。我有来自许多商家/平台的xml提要,不想硬编码,并最终为每个商家/平台提供一个解析器。我需要获取文件并选择要映射的字段。它是一种“泛型”解析器,问题是您的“泛型解析器”实际上是文档中每个节点的列表。目前,我还没有任何标准可以帮助你。您说您不知道节点名称,那么您知道要映射哪个节点的标准是什么?是的,它是文档中每个节点的列表。首先,我想显示所有节点以查看哪些节点包含我需要的信息,然后将它们与我数据库中的字段相匹配。我的问题是:是否有一种方法可以在不指定标记名的情况下确定“productItem”元素是我要查找的“items”?确定。如果只想遍历文档,可以使用SimpleXmlIterator或hasChildNodes()方法和childNodes属性。我编辑我的答案谢谢你的回答!我已经找到了一个脚本,大约做我需要的。但是,在映射每个节点时,您的函数将有所帮助。