Как бы вы посчитали, сколько раз два узла в файле XML встречаются в одном элементе? - PullRequest
2 голосов
/ 26 апреля 2020

Скажем, у меня есть несколько 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>


et c et c

Как бы я был в состоянии сосчитать времена, когда Маргрет и Майкл были соавторами.

Я использовал это:

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

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

print_r($counter);

, чтобы получить общее количество книг, написанных Маргрет, но я не уверен в как считать случаи соавторства.

1 Ответ

3 голосов
/ 26 апреля 2020

Один из вариантов - использовать 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 демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...