PHP SimpleXML Xpath 仅相对于当前节点

PHP SimpleXML Xpath Relative to Current Node Only

提问人:Maciek 提问时间:7/3/2023 更新时间:7/5/2023 访问量:29

问:

我正在尝试使用 xpath 运行一个简单的 PHP SimpleXML 命令。但是,我的 Xpath 正在获取整个文档中的所有节点,而不是相对于正在循环的节点的节点。注意:我想将两个 xpath 的循环分开。我不想将两者都放在一个 xpath 下,即遍历段落节点,然后仅在该段落中循环样式节点(如果它们存在)。//w:pStyle//w:p

 foreach($file->xpath('//w:p') as $p){
  echo 'Paragraph';
  $styles=$p->xpath('//w:pStyle');
  foreach($styles as $style){echo 'Style';}
 }

xpath 选择所有节点。相反,我希望它选择相对于段落节点的那些。这里的解决方案是什么?//w:pStylew:pStyle

php xpath 简单xml

评论


答:

1赞 zx485 7/3/2023 #1

您的错误是,您通过在表达式前面加上 .你应该用它作为前缀,像这样//.//

$styles=$p->xpath('.//w:pStyle');

这将选择元素的所有后代。
如果您只想要 的直系子级,请使用
w:pStylew:pw:p

$styles=$p->xpath('w:pStyle');

由于 是 的子项,而 是 的子项,因此可以使用w:pStylew:pPrw:p

$styles=$p->xpath('w:pPr/w:pStyle');