我试着用MWE解释。这里我们有9467328.xml:
<GROUP year="2004" groupid="9467328">
<TOWN name="Springfield"></TOWN>
<PEOPLE>
<PERSON eyecolor="brown" fullname="Jane Doe">
<HEALTH>
<WEIGHT>67</WEIGHT>
<HEIGHT>1.75</HEIGHT>
</HEALTH>
</PERSON>
</PEOPLE>
</GROUP>
这是9467328_extended.xml:
<GROUP source="SGXML" date="28092004">
<PEOPLE>
<PERSON fullname="Jane Doe">
<MEALS>
<MEAL id="1" title="Breakfast"/>
<MEAL id="2" title="Lunch"/>
<MEAL id="3" title="Dinner"/>
</MEALS>
</PERSON>
</PEOPLE>
</GROUP>
这些是匹配的文件,每个文件都有关于同一组的不同信息。其中一个有groupid
标签,但没有另一个。 两个文件名在整个数据库中都包含groupid
值。
我能够从特定PERSON
中选择所有TOWN
个节点:
/GROUP[TOWN/@name="Springfield"]/PEOPLE/PERSON
或计算所吃的所有食物:
count(/GROUP/PEOPLE/PERSON/MEALS/MEAL)
我需要计算在某个城镇吃过的所有饭菜,但是这些值是空的,因为它们实际上是不同的节点:
/GROUP[TOWN/@name="Springfield"]/count(/PEOPLE/PERSON/MEALS)
在找到如何将文件名删除到groupid
:
replace(fn:base-uri(),'^(.*/)(.*?)\.\w+$','$2')
您如何重写表达式,以便可以根据MEALS
值访问groupid
节点?