gpt4 book ai didi

xslt 与 Saxon 合并函数

转载 作者:行者123 更新时间:2023-12-02 11:42:14 27 4
gpt4 key购买 nike

有谁知道用于在 XSLT 中执行合并的内置函数,还是我需要编写自己的函数?

我有一些像这样的 xml:

<root>
<Element1>
<Territory>Worldwide</Territory>
<Name>WorldwideName</Name>
<Age>78</Age>
</Element1>
<Element1>
<Territory>GB</Territory>
<Name>GBName</Name>
</Element1>
</root>

第二个元素1(GB领土)是完全可选的,可能会或可能不会发生,但是当它发生时,它优先于全局领土。

所以我想要的是下面的合并:

<xsl:variable name="Worldwide" select="root/Element1[./TerritoryCode ='Worldwide']"/>
<xsl:variable name="GB" select="root/Element1[./TerritoryCode ='GB']"/>

<xsl:variable name="Name" select="ext:coalesce($GB/Name, $Worldwide/Name)"/>

上例中变量 Name 的 id 将包含 GBName。

我知道我可以使用 xsl:choose,但我有一些地方有 4 个地方可以查看,而 xsl:choose 变得困惑和复杂,所以希望找到一个内置函数,但没有到目前为止运气不错。

谢谢。

最佳答案

在 XSLT 2.0 中,您可以从变量创建一系列项目,然后使用谓词过滤器选择第一个项目:

<xsl:variable name="Name" select="($GB/Name, $Worldwide/Name)[1]"/>

谓词过滤器将选择序列中的第一个非空项。

例如,这仍然会产生“GBName”:

<xsl:variable name="emptyVar" select="foo"/>
<xsl:variable name="Worldwide" select="root/Element1[Territory ='Worldwide']"/>
<xsl:variable name="GB" select="root/Element1[Territory ='GB']"/>

<xsl:variable name="Name" select="($emptyVar, $GB/Name, $Worldwide/Name)[1]"/>

关于xslt 与 Saxon 合并函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18646321/

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