Счетчик истинных значений XML - PullRequest
0 голосов
/ 02 мая 2018

Мне нужно сосчитать всех 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 голосов
/ 03 мая 2018
<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>
0 голосов
/ 03 мая 2018

Не проще ли использовать 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>
...