Xml 如何使用xquery检索父节点和与特定条件匹配的子节点?
我试图从xml文件中获取部分数据,Xml 如何使用xquery检索父节点和与特定条件匹配的子节点?,xml,xslt,xquery,Xml,Xslt,Xquery,我试图从xml文件中获取部分数据, 源文件如下所示: <Odds> <Match ID="101" Time="A"> <Event type="Home"> <Score="1"/> </Event> <Event type="Away"> <Score="2"/> </Event> </Match> <Match
源文件如下所示:
<Odds>
<Match ID="101" Time="A">
<Event type="Home">
<Score="1"/>
</Event>
<Event type="Away">
<Score="2"/>
</Event>
</Match>
<Match ID="102" Time="B">
<Event type="Home">
<Score="1"/>
</Event>
<Event type="Away">
<Score="2"/>
</Event>
</Match>
</Odds>
我想获得赔率、比赛、事件、分数标签,其中事件类型仅与“主场”匹配。也就是说,结果如下:
<Odds>
<Match ID="101" Time="A">
<Event type="Home">
<Score="1"/>
</Event>
</Match>
<Match ID="102" Time="B">
<Event type="Home">
<Score="1"/>
</Event>
</Match>
</Odds>
我对XML很熟悉,读过一些书。尝试在xquery的何处添加条件并返回父节点。
但结果总是返回与完整子节点的匹配。
也就是说,结果与原始结果没有差异。
有没有什么好办法可以摆脱那些类型不在家的事件?
谢谢你的帮助 如果您的XQuery处理器支持XQuery更新,您可以编写以下内容:
copy $odds-proj := $odds
modify delete node $odds-proj//Event[@type = "Away"]
return $odds-proj
您可以在上尝试此示例,如果您正在处理一个大文件,我建议您使用以下查询:
for $match in $odds/Match
return <Match>
{$match/attribute()}
{$match/element()[@type = "Home"]}
</Match>
在$赔率/匹配中匹配$match
返回
{$match/attribute()}
{$match/element()[@type=“Home”]}
您可以在现场看到这个示例
此外,如果您希望使用Zorba来流式处理大型XML文档,我建议您在您的xquery表达式看起来如何?这可能是正确的,但是您使用的xquery实现/测试仪还显示了所有返回节点的父节点和子节点。有些人这样做了,你应该用“xslt”标签来问这个问题。XSLT解决方案很简单——只有几行。您对XSLT解决方案感兴趣吗?当然!欢迎任何解决方案!这也是一种新的学习方式。谢谢如果您正在处理一个巨大的文档,一个更有效的解决方案是对文档进行转换。在这种情况下,查询将更加复杂。