我对xquery完全陌生,我在从xml代码中获取正确的东西时遇到了问题。
以下是我正在处理的xml文件示例:
<root>
<name id = "a">
<first> Mary </first>
<last> Britton </last>
<company> ABC </company>
<phone> 203-942-0485 </phone>
</name>
<paper pid = "b">
<pname> Hello </pname>
<author> a </author>
</paper>
<publish>
<pbid> b </pbid>
<location>
<place> new york </place>
<sales> 100 </sales>
</location>
<location>
<place> los angeles </place>
<sales> 200 </sales>
</location>
</publish>
我试图获得作者的公司和电话号码,以便那些在纽约发布至少50个销售的人。
现在,我只能获取位置信息,甚至不能获取发布信息。如何思考这个问题的任何提示或帮助?提前谢谢!
答案 0 :(得分:1)
这个纯XPath 2.0表达式:
/*/name[for $auid in @id,
$p in /*/paper[author eq $auid],
$pid in $p/@pid
return
sum(/*/publish[pbid[1] eq $pid]
/location[place eq 'new york']
/sales
)
ge 50
]
/(company | phone)
根据以下XML文档进行评估(提供的文件被删除了无关的空白区域,以避免必须构建一个不必要的复杂XPath表达式,几乎到处都会使用normalize-space()
):
<root>
<name id = "a">
<first> Mary </first>
<last> Britton </last>
<company> ABC </company>
<phone> 203-942-0485 </phone>
</name>
<paper pid = "b">
<pname> Hello </pname>
<author>a</author>
</paper>
<publish>
<pbid>b</pbid>
<location>
<place>new york</place>
<sales> 100 </sales>
</location>
<location>
<place> los angeles </place>
<sales> 200 </sales>
</location>
</publish>
</root>
生成想要的正确结果:
<company> ABC </company>
<phone> 203-942-0485 </phone>