假设我有以下要素:
<?xml version="1.0"?>
<!DOCTYPE factory[
<!ELEMENT factorry (worker)+>
<!ELEMENT worker (#PCDATA)>
<!ATTLIST worker id ID #REQUIRED
boss IDREF #IMPLIED>
]>
<factory>
<worker id="i1"> jon </worker>
<worker id="i2" boss="i1"> sean </worker>
<worker id="i3" boss="i2"> jerry </worker>
<worker id="i4" boss="i3"> berry </worker>
</factory>
现在我想编写XPATH查询,它会给我所有老板的老板,所以在这个例子中我想要的结果是:
<worker id="i1"> jon < /worker>
<worker id="i2" boss="i1"> sean </worker>
因为Jon是Sean的老板,Sean是Jerry的老板,而Sean也是如此。
我知道如果我写id(//worker/@boss)
我会得到John,Sean和Jerry,所以我想在这个小组中再次使用相同的逻辑,但我不知道该怎么做。
答案 0 :(得分:1)
表达式的两个步骤递归应该给出你需要的结果
//worker[@id=//worker[@id=//worker/@boss]/@boss]/text()
返回
Text='jon'
Text='sean'