在第二个重复问题中选择唯一值- xslt1.0

问题描述 投票:0回答:0

我有以下示例 XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <AllOptions Id="123"></AllOptions>
    <AllOptions Id="456"></AllOptions>
    <AllOptions Id="789"></AllOptions>
    <AllOptions Id="789"></AllOptions>
    <AllOptions Id="101"></AllOptions>
    <SelectedOptions>
        <SelectedOption Id="101" Selected="No"></SelectedOption>
        <SelectedOption Id="789" Selected="Yes"></SelectedOption>
        <SelectedOption Id="789" Selected="No"></SelectedOption>
        <SelectedOption Id="123" Selected="No"></SelectedOption>
        <SelectedOption Id="456" Selected="No"></SelectedOption>
    </SelectedOptions>
</root>

我正在使用仅支持 XSLT1.0 的工具创建这些数据,并且我正在使用一些 XSLFO 和 XSL 转换这些数据。我尝试在下面添加我所拥有的简化版本和一些解释:

  • 首先,我选择
    <AllOptions>
    节点;
  • 在这里面,我需要在
    <SelectedOption>
    之后做第二个循环,并将
    @Id
    节点的
    <SelectedOption>
    @Id
    <AllOptions>
    相匹配;然后只显示一次当前
    @Selected
    属性值
<xsl:template name="ShowOptions">
    <xsl:for-each select="/root/AllOptions">
        <fo:block><xsl:value-of select="@Id"/></fo:block>
        <xsl:for-each select="../SelectedOptions/SelectedOption[@Id = current()/@Id]">
            <fo:block> <xsl:value-of select="@Selected"/> </fo:block>
        </xsl:for-each>
    </xsl:for-each>
</xsl:template>

使用上面的模板,我从下面获取值。这是不正确的,因为有些节点可以具有相同的@Id,在这个例子中这是@Id=789,@Selected 将被复制。

123 
   No
456
   No
789
   Yes
   No
789
   Yes
   No
101
   No

我需要的是显示当前的@Selected值

123 
   No
456
   No
789
   Yes
789
   No
101
   No

非常感谢任何帮助。

xslt xslt-1.0
© www.soinside.com 2019 - 2024. All rights reserved.