Поиск и печать XML с использованием XPath - PullRequest
2 голосов
/ 01 февраля 2012

Я ищу XML-файл, который выглядит следующим образом:

<producers>
  <producer>
    <name></name>
    <owner></owner>
    <phone></phone>
    <fax></fax>
    <overview></overview>
    <address>
      <civic></civic>
      <mailing></mailing>
      <town></town>
      <province></province>
      <postal></postal>
      <email></email>
      <website></website>
    </address>
    <products>
      <product>Salmon</product>
      <product>Trout</product>
    </products>
    <exports>
      <region>Canada</region>
      <region>United States</region>
    </exports>
  </producer>

Затем я ищу его так:

$upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÆÇÈÉÊËÎÏÔŒÙÛÜ"; 
$lower = "abcdefghijklmnopqrstuvwxyzàâæçèéêëîïôœùûü";

$region = "Canada";

$node = $xml->xpath('//producers/producer/exports[descendant::*[contains(translate(text(), "'.$upper.'", "'.$lower.'"), "'.$region.'")]]');

Проблема в том, что я хочу иметь возможность печататьвесь производитель.Но на данный момент у меня есть доступ к тому, что содержится в любых потомках экспорта.Есть ли способ, которым я могу вернуться на пару узлов, чтобы получить полный список нужного производителя?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Вы можете использовать этот XPath, он более читабелен:

$node = $xml->xpath('//producers/producer[exports/region[contains(translate(text(), "'.$upper.'", "'.$lower.'"), "'.$region.'")]]');

Он выберет желаемый producer.

1 голос
/ 01 февраля 2012

Я думаю, вам просто нужно поставить /../../ в конце своего xpath. Как то так

$node = $xml->xpath('//producers/producer/exports[descendant::*[contains(translate(text(), "'.$upper.'", "'.$lower.'"), "'.$region.'")]]/../../');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...