PHP 和 Xpath - 从内部文本获取节点
PHP and Xpath - Get node from inner text
我有以下XML结构
<url>
<loc>some-text</loc>
</url>
<url>
<loc>some-other-text</loc>
</url>
我的目标是从其内部文本(即 some-text
)或其一部分(即 other-text
)中获取 loc
节点。这是我的最佳尝试:
$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;
}
是否可以只使用 xpath 查询而不遍历所有节点来获取特定的 loc
节点?
是的,您可以使用 //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>
我有以下XML结构
<url>
<loc>some-text</loc>
</url>
<url>
<loc>some-other-text</loc>
</url>
我的目标是从其内部文本(即 some-text
)或其一部分(即 other-text
)中获取 loc
节点。这是我的最佳尝试:
$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;
}
是否可以只使用 xpath 查询而不遍历所有节点来获取特定的 loc
节点?
是的,您可以使用 //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>