XML真值计数器
我需要计算所有具有真实价值的ProductOwner。在我的例子中,我有一个真值,所以作为输出,我将得到数字1 以下是我的XML代码:XML真值计数器,xml,xslt,xpath,xquery,Xml,Xslt,Xpath,Xquery,我需要计算所有具有真实价值的ProductOwner。在我的例子中,我有一个真值,所以作为输出,我将得到数字1 以下是我的XML代码: <ClientList> <Client> <ProductOwner>true</ProductOwner> </Client> <Client> <ProductOwner>false</ProductOwner> </Cli
<ClientList>
<Client>
<ProductOwner>true</ProductOwner>
</Client>
<Client>
<ProductOwner>false</ProductOwner>
</Client>
</ClientList>
<ClientList>
<Client>
<Number>1</Number>
</Client>
</ClientList>
真的
假的
我想得到这样一个输出XML代码:
<ClientList>
<Client>
<ProductOwner>true</ProductOwner>
</Client>
<Client>
<ProductOwner>false</ProductOwner>
</Client>
</ClientList>
<ClientList>
<Client>
<Number>1</Number>
</Client>
</ClientList>
1.
以下是我的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>
真的
假的
对适当的XQuery
表达式使用count()
不是更容易吗
这将返回您需要的内容:
<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>
我认为xpath应该反映OP所指示的完整路径,因为在这种情况下,ProductOwner
可能会显示为Client
之外的其他元素的子元素。应该注意的是,基于运行给定XSLT xml的XPath或XSLT解释器,XPath函数的支持可能会受到限制。(我可能在这一点上吹毛求疵,但我个人一直试图弄明白为什么有些东西不起作用,结果却发现问题出在解释器,而不是xml上)。@Anthony True!你会发现我给出了很多答案,我告诉大家要尽可能具体-在大多数情况下,深度搜索是需要避免的。。。好吧,比方说,我只是在展示原则。。。