【发布时间】:2015-04-16 13:41:21
【问题描述】:
我有一个用 XML 编码的类似图形的结构。准确地说,有向无环图。 这些节点是唯一标识的,并具有编码的后继关系。
是否可以构造一个 XQuery 或 XPath 函数来导航图以找到满足简单条件的第一个节点?
更准确地说,我们来看下面的 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<obj>
<id>1</id>
<name>FINDME</name>
<relations>
<successor>2</successor>
</relations>
</obj>
<obj>
<id>2</id>
<relations>
<predecessor>1</predecessor>
<successor>3</successor>
</relations>
</obj>
<obj>
<id>3</id>
<relations>
<predecessor>2</predecessor>
</relations>
</obj>
</doc>
假设,当前节点是 3。 我想找到一个前驱节点的 id,它的名称标签等于“FINDME”。 为此,我可以使用以下 XPath:
/doc/obj[name='FINDME'
and id=/doc/obj[
id=/doc/obj[
id=3
]/relations/predecessor
]/relations/predecessor
]/id
是否可以泛化查询以处理任意级别的关系?
编辑:joemfb 的答案确实回答了这个问题。我有一个额外的请求,它是否可以为一个节点处理多个前驱节点并且不超过一次返回任何节点?
因此,它也适用于以下示例:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<obj>
<id>1</id>
<name>FINDME</name>
<relations>
<successor>2</successor>
<successor>4</successor>
</relations>
</obj>
<obj>
<id>4</id>
<relations>
<successor>2</successor>
<predecessor>1</predecessor>
</relations>
</obj>
<obj>
<id>2</id>
<relations>
<predecessor>1</predecessor>
<predecessor>4</predecessor>
<successor>3</successor>
</relations>
</obj>
<obj>
<id>3</id>
<relations>
<predecessor>2</predecessor>
</relations>
</obj>
</doc>
【问题讨论】:
-
任意级别的关系是什么意思?结构的哪一部分是任意的,或者任意嵌套的?
-
我作为示例提供的 XPath 查询只会找到所提供节点的前任的前任...我想处理“所有前任”