我有一个结构如下的XML文件:
<r>
<a>
<i>
<k>1</k>
<d>d1</d>
</i>
<i>
<k>3</k>
<d>d3</d>
</i>
</a>
<b>
<i>
<k>1</k>
<d>rd1</d>
</i>
<i>
<k>2</k>
<d>id2</d>
</i>
<i>
<k>3</k>
<d>rd3</d>
</i>
</b>
</r>我选择/r/a下的i节点并遍历它们,以查找/r/b下的关联节点,并检索它们的d节点的值,如下所示:
$data = [];
$nodes = $domXPath->evaluate('/r/a/i');
foreach($nodes as $node) {
$key = $domXPath->evaluate('string(k)', $node);
$data[] = $domXpath->evaluate("string(/r/b/i[k=$key]/d)", $node);
}这会在$data中产生正确的结果
[
"rd1",
"rd3",
]我的问题是,是否有可能在不拔出PHP键的情况下做到这一点,例如:
$data = [];
$nodes = $domXPath->evaluate('/r/a/i');
foreach($nodes as $node) {
$data[] = $domXpath->evaluate("string(/r/b/i[k=initial-context()/k]/d)", $node);
}发布于 2020-09-14 18:29:48
您可以使用单个XPath来完成此操作:
$nodes = $domXPath->evaluate('/r/b/i[k = /r/a/i/k]/d');
foreach($nodes as $node) $data[] = $node->textContent;表达式表示,对于每个/r/b/i节点,仅当其k节点与/r/a/i下的相应k节点匹配时才允许。
https://stackoverflow.com/questions/63882220
复制相似问题