Невозможно получить длину узлов в элементах с XPath для правильной работы - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу сосчитать экземпляры, которые Майкл Скотт и Маргрет Джейн фигурируют как соавторы.

Пример XML:

<person>
   <i> 
     <book>
      <author id="mj">Margret Jane</author> 
      <author id="ms">Michael Scott</author>
      <author id="sj">Sarah Jane</author>
     </book>
   </i>
   <i> 
     <book>
      <author id="mj">Margret Jane</author> 
      <author id="tw>Tim Wind</author>
      <author id="mj"Michael Scott</author>
     </book>
   </i>
   <i> 
     <article>
      <author id="mj">Margret Jane</author> 
      <author id="tw">Tim Wind</author>
      <author id="mj">Michael Scott</author>
     </article>
   </i>
</person> 


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

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

но я продолжаю получать 0 (я также использовал их идентификаторы в запросе, но все равно получаю 0)

edit: Как я смогу подсчитать все экземпляры книг И статей?

1 Ответ

0 голосов
/ 27 апреля 2020

Во-первых, ваш xml недействителен и содержит опечатки. Так должно быть:

<person>
   <i> 
     <book>
      <author id="mj">Margret Jane</author> 
      <author id="ms">Michael Scott</author>
      <author id="sj">Sarah Jane</author>
     </book>
   </i>
   <i> 
     <book>
      <author id="mj">Margret Jane</author> 
      <author id="tw">Tim Wind</author>
      <author id="ms">Michael Scott</author>
     </book>
   </i>
</person> 

Тогда, как упомянул Найджел Рен, если вы удалите пробелы из имен авторов в запросе, это должно сработать. Чтобы сделать это, используя их идентификаторы, попробуйте изменить xpath на

/person/i/book[author[@id="ms"]][author[@id="mj"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...