PHP и Xpath - получить узел из внутреннего текста

У меня есть следующая структура XML

<url>
  <loc>some-text</loc>
</url>

<url>
  <loc>some-other-text</loc>
</url>

Моя цель - получить узел loc из его внутреннего текста (т.е. some-text) или его часть (т.е. other-text). Вот моя лучшая попытка:

$doc = new DOMDocument('1.0','UTF-8');
$doc->load($filename);
$xpath = new Domxpath($doc);
$locs = $xpath->query('/url/loc');

foreach($locs as $loc) {
    if(preg_match("/other-text/i", $loc->nodeValue)) return $loc->parentNode;
}

Можно ли получить конкретный узел loc без повторения всех узлов, просто используя запрос xpath?


person Giorgio    schedule 09.01.2015    source источник


Ответы (1)


Да, вы можете использовать такой запрос, как //url/loc[contains(., "other-text")]


Пример:

$xml = <<<'XML'
<root>
<url>
  <loc>some-text</loc>
</url>

<url>
  <loc>some-other-text</loc>
</url>
</root>
XML;

$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

foreach ($xpath->query('//url/loc[contains(., "other-text")]') as $node) {
    echo $dom->saveXML($node);
}

Вывод:

<loc>some-other-text</loc>
person user3942918    schedule 09.01.2015