我正在使用XSLT处理XML文件,我希望获得具有以下属性的每个项目的属性列表:
这是一个示例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#
有可能实现吗?
答案 0 :(得分:1)
您使用distinct-values
的事实表明您正在使用XSLT 2.0,因此您可以结合使用XPath 2.0 for
和if
构造:
distinct-values(
for $prop in properties/property
return if ($prop/@aaa != '') then $prop/@aaa else $prop
)