gpt4 book ai didi

php - 相对 XPath 查询按 'level' 迭代

转载 作者:行者123 更新时间:2023-12-03 16:13:03 24 4
gpt4 key购买 nike

我试图找出一个 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>

我要抢所有 <data>不包含在 <region> 中的节点.

然后我想把所有最顶层的 <region>节点并在它们上重复前面的过程,相对工作。

本质上,我将在 <data> 上执行多个进程 (PHP)。节点基于它们的内容,然后替换它们。然而, <region>节点充当一种范围分隔符,一旦我处理完所有 <data>给定范围内的节点,我向下移动区域级别。 <data>节点可以嵌套在其他不相关的节点中。

不确定 XPath 是否是最好的工具,我在尝试解决这个问题时遇到了很多麻烦。如前所述,我使用的是 DOM 类的 PHP 实现。

最佳答案

Essentially, I'm going to be performing a number of processes (PHP) on the nodes based on their contents, then replacing them. However, nodes act as a sort of scope delimiter, and once I finish processing all <data> nodes in a given scope, I move down a region-level. <data> nodes may be nested within other irrelevant nodes.



使用 :
//data[count(ancestor::region) = $n]

哪里 $n是 0, 1, ..., 最大深度。

对于 $n 的每个值,表达式选择所有 data “级别 $n”的元素 .

您可以找到“最大深度”作为 count(ancestor::region)+1的最大值对于通过以下方式选择的每个节点:
//region[not(descendant::region)]

此最大值可以在单个 XPath 2.0 表达式中指定 ,但不能使用单个 XPath 1.0 表达式。

关于php - 相对 XPath 查询按 'level' 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com