计算真值XML

时间:2018-05-02 19:12:55

标签: xml xslt xpath xquery

我需要计算所有具有真正价值的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>

2 个答案:

答案 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>