我有一个xml文件和相应的xsl文件。我有一个以下代码行,在代码中重复了很多次。我需要找出状态值为0的次数?我怎么能这样做?
提前致谢
答案 0 :(得分:2)
使用xpath count(//UserValue[@title = 'status' and @value = 0])
。
答案 1 :(得分:2)
输入XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<child1>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="statusss"></UserValue>
</child1>
<child2>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
<UserValue type="int" value="0" title="status"></UserValue>
</child2>
</root>
这将计算整个文件中UserValue
个节点的数量,这些节点具有属性Value='0'
和属性title='status'
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://www.plmxml.org/Schemas/PLMXMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="count_nodes" select="count(//ns:UserValue[@value='0' and @title='status'])"/>
<xsl:template match="/">
<xsl:element name="count">
<xsl:value-of select="$count_nodes"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="utf-8"?>
<Count>2</Count>
根据Dimitre对绩效差异的评论进行编辑:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://www.plmxml.org/Schemas/PLMXMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="count_nodes" select="count(/*/*/ns:UserData/ns:UserValue[@title = 'status' and @value= '0'])"/>
<xsl:template match="/">
<xsl:element name="count">
<xsl:value-of select="$count_nodes"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:1)
XML文档位于默认命名空间。
因此,解决方案必须考虑到这一点:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://www.plmxml.org/Schemas/PLMXMLSchema">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="count(//x:UserValue[@title = 'status' and @value= '0'])"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
评估指定节点计数的XPath表达式,并输出此计数:
2
请注意:使用//
伪运算符的XPath表达式可能非常慢,因此如果XML文档的结构众所周知,则应使用等效的XPath表达式不包含//
。
例如,如果我已正确理解所提供文档的结构,那么这是一个更好的XPath表达式:
count(/*/*/x:UserData/x:UserValue[@title = 'status' and @value= '0'])