为了账号安全,请及时绑定邮箱和手机立即绑定

根据初始上下文选择节点

根据初始上下文选择节点

PHP
拉丁的传说 2024-01-19 15:34:04
我有一个具有以下结构的 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>我选择i下面的节点/r/a并迭代它们以查找下面的关联节点/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);}
查看完整描述

1 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您可以使用单个 XPath 来完成此操作:

$nodes = $domXPath->evaluate('/r/b/i[k = /r/a/i/k]/d');
foreach($nodes as $node) $data[] = $node->textContent;

该表达式表示,对于每个/r/b/i节点,仅当其节点与 下的k相应节点匹配时才允许。k/r/a/i


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 25 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信