gpt4 book ai didi

html - 使用 xslt 键查找唯一值

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

<ROOT>
<AA Aattr="xyz1">
<BB bAttr1="firefox" bAttr2="aaa" >
</BB>
<BB bAttr1="chrome" bAttr2="aaa" >
</BB>
<BB bAttr1="firefox" bAttr2="bbb" >
</BB>
<BB bAttr1="chrome" bAttr2="bbb" >
</BB>
</AA>
<AA Aattr="xyz2">
<BB bAttr1="firefox" bAttr2="aaa" >
</BB>
<BB bAttr1="chrome" bAttr2="ccc" >
</BB>
<BB bAttr1="firefox" bAttr2="ddd" >
</BB>
</AA>

我想从属性“Aattr”为 xyz1 的节点“AA”中选择节点“BB”中属性“bAttr2”的不同\唯一值

对于给定的 xml,我需要输出为“aaa”,“bbb”

我使用键尝试了以下逻辑。但是没有用。请帮忙

<xsl:key name="nameDistinct" match="BB" use="@bAttr1"/>
<xsl:template match="/">
<xsl:for-each select="ROOT/AA[@Aattr='xyz1']">
<xsl:for-each select="BB[generate-id()=generate-id(key('nameDistinct',@bAttr2)[1])]">
<xsl:value-of select="@bAttr2"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>

最佳答案

这里有两个选择:

定义键时过滤键可用的项目:

  <xsl:key name="nameDistinct" match="AA[@Aattr = 'xyz1']/BB" use="@bAttr2"/>

<xsl:template match="/">
<xsl:for-each
select="ROOT/AA/BB[generate-id() =
generate-id(key('nameDistinct', @bAttr2)[1])]">
<xsl:value-of select="@bAttr2"/>
</xsl:for-each>
</xsl:template>

或在分组表达式内过滤:

  <xsl:key name="nameDistinct" match="BB" use="@bAttr2"/>

<xsl:template match="/">
<xsl:for-each
select="ROOT/AA/BB[generate-id() =
generate-id(key('nameDistinct', @bAttr2)
[../@Aattr = 'xyz1']
[1])]">
<xsl:value-of select="@bAttr2"/>
</xsl:for-each>
</xsl:template>

前一种方法不那么困惑而且效率稍高,而后者允许您对分组进行参数化(即对未硬编码为“xyz1”的值进行分组),例如:

  <xsl:key name="nameDistinct" match="BB" use="@bAttr2"/>

<xsl:template match="/">
<xsl:for-each select="ROOT/AA">
<xsl:for-each
select="BB[generate-id() =
generate-id(key('nameDistinct', @bAttr2)
[../@Aattr = current()/@Aattr]
[1])]">
<xsl:value-of select="@bAttr2"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>

关于html - 使用 xslt 键查找唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548783/

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