我正在使用 XSLT 处理一个 XML 文件,我想获取每个项目的属性列表,其中包含以下属性:
- 如果设置了属性aaa,则取属性的值
- 如果未设置属性aaa ,则取元素的值
- 从结果集中,只取不同的值
这是一个示例 XML
<items>
<item>
<properties>
<property aaa="">pA</property>
<property aaa="pB">pC</property>
<property aaa="pA">pA</property>
</properties>
</item>
<item>
<properties>
<property aaa="">pD</property>
<property aaa="pE">pF</property>
</properties>
</item>
</items>
现在这就是我试图实现它的方式:
<xsl:for-each select="/items/item">
<xsl:for-each select="distinct-values(properties/property/@aaa | properties/property)[not(. = '')]"><xsl:value-of select="."/>#</xsl:for-each>
</xsl:for-each>
属性aaa始终存在,只是有时它为空。我遇到的问题是,如果属性和元素都设置了,它们都会出现在集合中。我只希望属性出现。因此,对于上述 XML,正确的解决方案是
pA#pB#
pD#pE#
我的代码给我的是
pA#pB#pC#
pD#pE#pF#
有可能实现吗?