首页 > 解决方案 > 您如何计算 XML 文件中的两个节点在一个元素中出现的次数?

问题描述

假设我有几个人的 XML 文件和他们写的书,如下所示:

<person name="Margret Jane" id="mj"> 
  <book>
    <author id="mj"> Margret Jane </author> 
    <author id="js"> Sarah Jane </author>
    <author id="ms"> Michael Scott </author>
  </book>
  <book>
    <author id="mj"> Margret Jane </author> 
    <author id="fr"> Freya Rob </author>
    <author id="ms"> Michael Scott </author>
  </book>


等等等等

我怎么能数出玛格丽特和迈克尔是合著者的次数。

我用过这个:

$getMargret = new DOMDocument();
$getMargret->load("Margret.xml");

$counter= $getMargret->getElementsByTagName("person")[0]->getElementsByTagName('book')->length;

print_r($counter);

为了获得玛格丽特自己创作的书籍总数,但我不确定如何计算共同作者的实例。

标签: phpxmldom

解决方案


一种选择是对两个名称都使用DOMXpath检查:

/person/book[author = ' Margret Jane ' and author = ' Michael Scott ']

代码示例

$getMargret = new DOMDocument();
$getMargret->load("Margret.xml");
$xpath = new DOMXpath($getMargret);
$counter=  $xpath->query("/person/book[author = ' Margret Jane ' and author = ' Michael Scott ']")->length;
echo $counter;

输出

2

看一个PHP 演示


推荐阅读