一尘不染

PHP计数XML元素

php

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

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

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

谢谢您的帮助


阅读 292

收藏
2020-05-29

共1个答案

一尘不染

DOM您可以使用

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

计算 所有OfferName元素
length是的属性DOMNodeList

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

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

请注意,由于XPath查询将仅考虑直接子级,因此in
有些不准确。如果您在OfferNameList元素下方的任何地方都需要OfferName元素,请调整您的问题。

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


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

$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
2020-05-29