如何获取XSLT中的子节点数?

时间:2014-06-17 09:57:14

标签: xslt xslt-1.0

如何获取任何子值的出现次数。从下面的代码我有子值<Name>Network B</Name>,即'网络B'。现在如何找到有多少运算符节点具有此值。

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w3="http://www.w3.org">
  <xsl:output method="html" indent="yes"/>
  <xsl:variable name="allStations" select="//w3:OperatorStation"/>
  <xsl:template match="/">

    <xsl:value-of select="count($allStations[Nodes/ChildNodes/Name = 'Network B'])"/>
    //Here it return 0(zero) count always

  </xsl:template>
</xsl:stylesheet>

输入XML文件

<?xml version="1.0" encoding="utf-8"?>
    <OperatorStationCollection xmlns="http://www.w3.org" >
    <OperatorStation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">        
        <Nodes>
          <ChildNodes>            
            <Name>Network A</Name>              
          </ChildNodes>          
          </Nodes>   
      </OperatorStation>      
    <OperatorStation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">        
      <Nodes>
        <ChildNodes>          
          <Name>Network B</Name>         
        </ChildNodes>        
      </Nodes>
    </OperatorStation>
    <OperatorStation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">        
      <Nodes>
         <ChildNodes>            
            <Name>Network A</Name>            
         </ChildNodes>              
      </Nodes>
    </OperatorStation>
    </OperatorStationCollection>

Desired Outout:此处没有出现'Network B'1

1 个答案:

答案 0 :(得分:0)

上的默认命名空间声明
<OperatorStationCollection xmlns="http://www.w3.org" >

表示所有其后代元素(包括NodesChildNodesName)属于此命名空间,因此您需要使用{{1在路径中的那些步骤上也加上前缀:

w3:

您当前的XSLT正在寻找不在命名空间中的<xsl:value-of select="count($allStations[ w3:Nodes/w3:ChildNodes/w3:Name = 'Network B'])"/> NodesChildNodes元素,并正确地确定没有。