gpt4 book ai didi

xslt - XPATH 用于名称在其他一些元素名称中的第一个元素

转载 作者:行者123 更新时间:2023-12-03 16:12:04 25 4
gpt4 key购买 nike

<choices>
<sic />
<corr />
<reg />
<orig />
</choices>

<choice>
<corr>Red</corr>
<sic>Blue</sic>
<choice>

我想选择 <choice> 中的第一个元素其名称与 <choices> 中任何元素的名称匹配.

如果 name(node-set) 返回一个名称列表,而不仅仅是第一个节点的名称,我可以使用
select="choice/*[name() = name(choices/*)][1]"
但它没有(至少在 1.0 中没有),所以我将名称连接到一个字符串中并使用 contains():
<xsl:variable name="choices.str">
<xsl:for-each select="choices/*">
<xsl:text> </xsl:text><xsl:value-of select="concat(name(),' ')"/>
</xsl:for-each>
</xsl:variable>
<xsl:apply-templates select="choice/*[contains($choices.str,name())][1]"/>

并得到我想要的:
Red<corr>的值

有没有更直接的方法?

最佳答案

您可以像这样使用 key() 函数...

当这个输入文件...

<t>
<choices>
<sic />
<corr />
<reg />
<orig />
</choices>
<choice>
<corr>Red</corr>
<sic>Blue</sic>
</choice>
</t>

...作为输入提供给此 XSLT 1.0 样式表...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kChoices" match="choices/*" use="name()" />

<xsl:template match="/">
<xsl:variable name="first-choice" select="(*/choice/*[key('kChoices',name())])[1]" />
<xsl:value-of select="$first-choice" />
<xsl:text>, the value of &lt;</xsl:text>
<xsl:value-of select="name( $first-choice)" />
<xsl:text>&gt;</xsl:text>
</xsl:template>

</xsl:stylesheet>

...生成此输出文本...
Red, the value of <corr>

XSLT 2.0 旁白

在 XSLT 2.0 中,您可以使用以下替代方法来计算 $first-choice 变量...

选项 1:
(*/choice/*[for $c in . return ../../choices/*[name()=name($c)]])[1]

选项 2:
(*/choice/*[some $c in ../../choices/* satisfies name($c)=name()])[1]

关于xslt - XPATH 用于名称在其他一些元素名称中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850223/

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