PHP和Xpath - 从内部文本中获取节点

时间:2015-01-09 19:20:28

标签: php xml xpath domdocument

我有以下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查询?

1 个答案:

答案 0 :(得分:3)

是的,您可以使用//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>