Php 通过';级别';
我试图找出一个XPath查询字符串来执行以下操作 给定如下XML文档:Php 通过';级别';,php,xpath,relative-path,Php,Xpath,Relative Path,我试图找出一个XPath查询字符串来执行以下操作 给定如下XML文档: <root> <data>foo1</data> <irrelevant-node> <data>foo1</data> </irrelevant-node> <irrelevant-node /> <data>foo2</data> <
<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>
foo1
foo1
食物2
bar1
bar2
你好
你好
世界1
三维直方图
foo1
我想获取未包含在
中的所有
节点
然后,我想获取所有最上面的
节点,并在它们上重复前面的过程,相对地工作
本质上,我将根据
节点的内容在其上执行许多进程(PHP),然后替换它们。但是,
节点充当一种范围定界符,一旦我处理完给定范围内的所有
节点,我就会向下移动一个区域级别<代码>节点可能嵌套在其他不相关的节点中
我不确定XPath是否是解决这个问题的最佳工具,我在尝试解决这个问题时遇到了很多麻烦。如前所述,我正在使用DOM类的PHP实现
基本上,我会
执行多个进程(PHP)
根据节点的
内容,然后替换它们。
但是,节点起到排序的作用
范围分隔符的,一旦我完成
处理给定数据库中的所有
节点
范围,我向下移动一个区域级别。
节点可以嵌套在
其他无关节点
使用:
//data[count(ancestor::region) = $n]
其中,$n
为0,1,…,最大深度
对于$n的每一个值,表达式将选择“级别$n”的所有数据
元素
您可以找到“最大深度”作为所选每个节点的计数(祖先::区域)+1的最大值:
//region[not(descendant::region)]
这个最大值可以在单个XPath 2.0表达式中指定,但不能在单个XPath 1.0表达式中指定。在第二次迭代中还应使用“bar…”数据来选择/root/region/unrelated节点/数据。
?@Alejandro:这是正确的。第一次迭代应该捕获所有foo
数据。第二个,条
。第三,你好,等等。问得好,+1。请参阅我的答案以了解解释和解决方案。:)谢谢迪米特里·诺瓦切夫;我要试一试:)嗯,它好像不起作用;声明它是无效的表达式。我测试了//zuq:data[count(祖先::zuq:region=0)]
(我没有提到目标节点在zuq
命名空间中),结果出错。抱歉,不管怎样,这是你和我的输入错误的集合:)太棒了!再次感谢你,迪米特@汤姆卡泰克索多斯:对不起,我不得不修正我答案中的两个拼写错误。现在它是正确的。