合并两个DOMNodeList在xpath中。

7

我有两个DOMNodeLists

$textNodes = $xpath->query('//text()');

并且

$titleNodes = $xpath->query('//@title');

我如何合并这些DOMNodeLists,以便可以在foreach循环中使用?
1个回答

9
XPath支持|运算符来合并两个节点集:
$textNodes = $xpath->query('//text() | //@title');

想象一个简单的例子:

$xml = '<?xml version="1.0"?>
<person>
  <name>joe</name>
  <age>99</age>
</person>';

$doc = new DOMDocument();
$doc->loadXml($xml);
$selector = new DOMXPath($doc);

$nodes = $selector->query('//name | //age');

foreach($nodes as $node) {
    echo $node->nodeName, PHP_EOL;
}


好的,那很有效。使用textNodes,我可以通过$textNode->parentNode->replaceChild($newNode, $textNode);替换它们的值。那么我该如何替换DomAttr的值呢? - Horen
好的,你应该考虑在另一个问题中询问这个问题,或者添加一些XML片段来回答第二个问题。 - hek2mgl
没错,你说得对。我用 getAttributesetAttribute 解决了它。 - Horen
2
XPATH 运算符 "|" 结合两个节点集,因此它与逻辑 "or" 运算符不同。 - Denis Giffeler
@DenisGiffeler 谢谢你的提示! - hek2mgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接