【发布时间】:2011-01-07 20:05:42
【问题描述】:
我正在尝试找出一个 XPath 查询字符串来执行以下操作。
给定一个这样的 XML 文档:
<root>
<data>foo1</data>
<irrelevant-node>
<data>foo1</data>
</irrelevant-node>
<irrelevant-node />
<data>foo2</data>
<irrelevant-node />
<region>
<data>bar1</data>
<data>bar2</data>
<irrelevant-node />
<region>
<data>hello1</data>
<irrelevant-node />
<data>hello2</data>
<region>
<irrelevant-node />
<data>world1</data>
</region>
</region>
<irrelevant-node />
<data>bar3</data>
<irrelevant-node>
<data>foo1</data>
</irrelevant-node>
<irrelevant-node />
</region>
<irrelevant-node />
</root>
我想获取所有未包含在 <region> 中的 <data> 节点。
然后我想抓取所有最顶层的<region> 节点并在它们上重复前面的过程,相对地工作。
基本上,我将根据 <data> 节点的内容在它们上执行多个进程 (PHP),然后替换它们。但是,<region> 节点充当一种范围分隔符,一旦我完成处理给定范围内的所有<data> 节点,我就会向下移动一个区域级别。 <data> 节点可能嵌套在其他不相关的节点中。
不确定 XPath 是否是解决此问题的最佳工具,我在尝试解决此问题时遇到了很多麻烦。如前所述,我使用的是 DOM 类的 PHP 实现。
【问题讨论】:
-
/root/region/irrelevant-node/data 也应该在第二次迭代中选择“bar...”
data? -
@Alejandro:没错。第一次迭代应该捕获所有
foo数据。第二个,bar。第三个hello,以此类推。 -
好问题,+1。请参阅我的答案以获取解释和解决方案。 :)
标签: php xpath relative-path