我有以下示例 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
非常感谢任何帮助。