gpt4 book ai didi

xml - XQuery - 使用一个值访问另一个值

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:18 24 4
gpt4 key购买 nike

我想从 XML 文档中提取所有懂英语的指南的名称,问题是我不知道如何做。我使用 XQuisitor 查询 XML 文档。

片段:

<GuideLang>
<guideID>1</guideID>
<lname>English</lname>
</GuideLang>
<GuideLang>
<guideID>2</guideID>
<lname>German</lname>
</GuideLang>
<GuideLang>
<guideID>3</guideID>
<lname>Swedish</lname>
</GuideLang>
<Guide>
<guideID>1</guideID>
<gname>John Smith</gname>
</Guide>
<Guide>
<guideID>2</guideID>
<gname>Weber Schneider</gname>
</Guide>

我知道:

 element Result {
//GuideLang[lname='English']
}

给我有关语言和指南 ID 的所有信息 - 但我如何使用该 ID 仅从指南节点打印指南的名称?

谢谢!

最佳答案

使用这个纯 XPath 2.0 表达式:

/*/Guide
[for $gid in guideID
return ../GuideLang[guideID eq $gid and lname eq 'English']
]
/gname

这假定提供的文档片段的节点是(未提供的)XML 文档的(未提供的)顶级元素的子元素。

这甚至可以转换为 XPath 1.0 表达式(注意没有使用 //!):

/*/Guide
[guideID
=
../GuideLang[lname = 'English']/guideID
]
/gname

更新:

只是为了让那些惊讶于上面的第一个表达式是纯 XPath 2.0 的人,这里是一个完整的基于 XSLT 2.0 的验证:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/*">
<xsl:sequence select=
"/*/Guide
[for $gid in guideID
return ../GuideLang[guideID eq $gid and lname eq 'English']
]
/gname
"/>
</xsl:template>
</xsl:stylesheet>

当此 XSLT 2.0 转换应用于以下文档时(提供的片段,包装在顶部元素中):

<t>
<GuideLang>
<guideID>1</guideID>
<lname>English</lname>
</GuideLang>
<GuideLang>
<guideID>2</guideID>
<lname>German</lname>
</GuideLang>
<GuideLang>
<guideID>3</guideID>
<lname>Swedish</lname>
</GuideLang>
<Guide>
<guideID>1</guideID>
<gname>John Smith</gname>
</Guide>
<Guide>
<guideID>2</guideID>
<gname>Weber Schneider</gname>
</Guide>
</t>

计算 XPath 2.0 表达式并输出正确选择的节点:

<gname>John Smith</gname>

关于xml - XQuery - 使用一个值访问另一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com