php计数xml元素 [英] php count xml elements

查看:60
本文介绍了php计数xml元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,计算XML文件中元素数量的最佳方法是什么?就我而言,我想计算标签"OfferNameList"中名称为"OfferName"的XML标签的数量.

Hi what is the best way to count the number of elements in a XML file? In my case I want to count the number of XML tags with the name "OfferName" within the tag "OfferNameList".

下面的XML包含在php变量$ offers

The XML below is contained in a php variable $offers

$offers = '<OfferNameList>
  <OfferName>...</OfferName>
  <OfferName>...</OfferName>
  <OfferName>...</OfferName>
  ...
</OfferNameList>';

感谢您的帮助

推荐答案

使用 DOM 您可以使用

With DOM you can either use

$dom->getElementsByTagName('OfferName')->length;

仅计算 所有OfferName元素 . lengthDOMNodeList的属性.

to count all OfferName elements only. length is an attribute of DOMNodeList.

要计算OfferNameList 中的所有 所有OfferName元素,可以使用

To count all OfferName elements within an OfferNameList, you can use DOMXPath::evaluate

$xpath->evaluate('count(//OfferNameList/OfferName');

请注意,此处的 有点不准确,因为XPath查询将仅考虑直接子级.如果您需要在OfferNameList元素下方的任何地方提供OfferName元素,请调整您的问题.

Note that within is somewhat inaccurate here as the XPath query will only consider direct children. Please adjust your question if you need OfferName elements anywhere below a OfferNameList element.

还请注意,//将查询文档中的任何位置,这对于大型文档而言可能效率较低.如果您知道OfferNameList元素仅出现在XML中的某个位置,请使用直接路径.

Also note that // will query anywhere in the document, which might be less efficient for large documents. If you know OfferNameList elements occur at a certain position in your XML only, use a direct path.

完整的示例(在键盘上运行):

$xml = <<< XML
<root>
    <NotOfferNameList>
      <OfferName>...</OfferName>
      <OfferName>...</OfferName>
      <OfferName>...</OfferName>
    </NotOfferNameList>
    <OfferNameList>
      <OfferName>...</OfferName>
      <OfferName>...</OfferName>
      <OfferName>...</OfferName>
    </OfferNameList>;
</root>
XML;

$dom = new DOMDocument;
$dom->loadXml($xml);

// count all OfferName elements
echo $dom->getElementsByTagName('OfferName')->length, PHP_EOL; // 6

// count all OfferNameList/OfferName elements
$xp = new DOMXPath($dom);
echo $xp->evaluate('count(//OfferNameList/OfferName)'); // 3

这篇关于php计数xml元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆