我需要计算所有具有真正价值的ProductOwner。在我的情况下,我有一个真值,所以输出我会得到数字1。
这是我的XML代码:
<ClientList>
<Client>
<ProductOwner>true</ProductOwner>
</Client>
<Client>
<ProductOwner>false</ProductOwner>
</Client>
</ClientList>
我想获得这样的输出XML代码:
<ClientList>
<Client>
<Number>1</Number>
</Client>
</ClientList>
这是我的XSL代码,但它无法正常工作:
<Number>
<xsl:variable name="Number" select="substring(ProductOwner, 1, 4)" />
<xsl:for-each select="ClientList/Client">
<xsl:choose>
<xsl:when test="(ClientList/Client/@ProductOwner)='true'">true</xsl:when>
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</Number>
答案 0 :(得分:3)
对count()
表达式使用XQuery
会不会更容易?
这应该返回你需要的东西:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ClientList>
<Client>
<Number>
<xsl:value-of select="count(/ClientList/Client/ProductOwner[text()='true'])"/>
</Number>
</Client>
</ClientList>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
<xsl:template match="ClientList">
<xsl:element name="ClientList">
<xsl:for-each select="Client">
<xsl:if test="child::ProductOwner='true'">
<client>
<number>
<xsl:value-of select="count(ProductOwner)"/>
</number>
</client>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>