如何根据节点值获取子节点数?

时间:2014-03-24 12:38:46

标签: xml xslt xpath

我有一个以下的xml。

<Result>
    <Message>
      <Type>Error</Type>
      <Description>ABC</Description>
    </Message>
    <Message>
      <Type>Warning</Type>
      <Description>DEF</Description>
    </Message>
    <Message>
      <Type>Error</Type>
      <Description>GHI</Description>
    </Message>
    <Message>
      <Type>Information</Type>
      <Description>IJK</Description>
    </Message>
</Result>

我希望结果像

ABC
DEF
GHI
JKL

Total Error: 2
Total warning: 1
Total Information:1

我能够使用count(// Message / Type)获得子记录的总数,结果是4。

我想得到错误的总数,我试过

count(//消息/类型&amp; eq;&#34;错误&#34;)

但它没有用。

这是我的xsl。

    <ul>
      <xsl:for-each select="Message">
        <li>
          <xsl:value-of select="./Type" />
        </li>
      </xsl:for-each>
    </ul>
    Total Count Error:<xsl:value-of select="(count(//Error/Type &eq; "Error"))"/>

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

首先,如果要输出每个消息元素的描述,则需要引用描述元素,而不是类型

  <xsl:for-each select="Message">
    <li>
      <xsl:value-of select="Description" />
    </li>
  </xsl:for-each>

在累加总误差方面,表达式如下(假设您位于父结果元素上。

<xsl:value-of select="count(Message[Type = 'Error'])"/>

试试这个XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="Result">
     <ul>
      <xsl:for-each select="Message">
        <li>
          <xsl:value-of select="Description" />
        </li>
      </xsl:for-each>
    </ul>
    Total Count Error:<xsl:value-of select="count(Message[Type = 'Error'])"/><br />
    Total Count Warning:<xsl:value-of select="count(Message[Type = 'Warning'])"/><br />
    Total Count Information:<xsl:value-of select="count(Message[Type = 'Information'])"/><br />
  </xsl:template>
</xsl:stylesheet>