PHP SimpleXML中如何让XPath仅相对于当前节点查询?
修正SimpleXML中XPath查询范围,仅获取当前段落节点下的w:pStyle
- 问题根源:XPath表达式
//w:pStyle会从整个文档根节点开始递归查找所有匹配节点,完全忽略当前$p节点的上下文,导致每次循环都拿到全文档的w:pStyle。 - 解决方案:使用相对路径表达式,将查询范围限制在当前节点内部:
- 用
.//w:pStyle:.代表当前节点,.//表示从当前节点开始递归查找所有后代中的w:pStyle节点;如果w:pStyle是w:p的直接子节点,也可以用./w:pStyle或直接w:pStyle。
- 用
修改后的代码:
foreach($file->xpath('//w:p') as $p){ echo 'Paragraph'; // 改为相对路径,仅在当前段落节点下查找 $styles = $p->xpath('.//w:pStyle'); foreach($styles as $style){ echo 'Style'; } }
内容的提问来源于stack exchange,提问作者Maciek
相关产品推荐
相关产品推荐

