如何使用模板和变量名来计算xsl中特定节点的某些值

时间:2013-05-09 18:24:49

标签: templates variables xslt

我使用模板

 <xsl:template name="myTemplate"> 

我需要计算其值为“ON”和“OFF”的级别节点的数量。

我想要的最终报告:

this file contains three "ON" values and two "OFF" values.

查看我的xml文件的一部分。

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml:stylesheet type='text/xsl' href='view.xsl'?>
<DOC>
<show>VIEW<show/>
<Entry>
 <light>ae</light>
 <level>ON</level>
</Entry>
<Entry>
 <light>by</light>
 <level>OFF</level>
</Entry>
<Entry>
 <light>ac</light>
 <level>OFF</level>
</Entry>
<Entry>
 <light>pc</light>
 <level>ON</level>
</Entry>
<Entry>
 <light>tc</light>
 <level>ON</level>
</Entry>

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这些简单的XPath可以解决这个问题:

count(/*/*/level[. = 'ON'])

count(/*/*/level[. = 'OFF'])

要进行验证,请参阅此XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="yes" method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/*">
    <xsl:text>The number of ON nodes is: </xsl:text>
    <xsl:value-of select="count(/*/*/level[. = 'ON'])"/>
    <xsl:text/>
    <xsl:text>The number of OFF nodes is: </xsl:text>
    <xsl:value-of select="count(/*/*/level[. = 'OFF'])"/>
  </xsl:template>

</xsl:stylesheet>

...适用于提供的XML:

<DOC>
  <show>VIEW</show>
  <Entry>
    <light>ae</light>
    <level>ON</level>
  </Entry>
  <Entry>
    <light>by</light>
    <level>OFF</level>
  </Entry>
  <Entry>
    <light>ac</light>
    <level>OFF</level>
  </Entry>
  <Entry>
    <light>pc</light>
    <level>ON</level>
  </Entry>
  <Entry>
    <light>nc</light>
    <level>ON</level>
  </Entry>
</DOC>

...生成了想要的结果:

The number of ON nodes is: 3
The number of OFF nodes is: 2

答案 1 :(得分:0)

问题是计算和拼出数字,即二,三。请在下面的XSLT和要给出的链接中使用的格式值列表中找到。

    <?xml version='1.0'?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="DOC">
    <xsl:text>this file contains </xsl:text> 
    <xsl:number value="count(descendant::level[(.)='ON'])" format="w"/>
    <xsl:text> "ON" values and </xsl:text>
    <xsl:number value="count(descendant::level[(.)='OFF'])" format="w"/>
    <xsl:text> "OFF" values.</xsl:text>
    </xsl:template>
    </xsl:stylesheet>

请参阅以下文档格式: http://www.w3.org/TR/xslt20/#element-number