如何获取XSLT中存在的子节点计数



如何获取任何子值的出现次数。从下面的代码我有子值<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: No of occurrence of 'Network B' here its 1

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

意味着所有的后代元素(包括Nodes, ChildNodesName)都属于这个名称空间,所以您也需要在路径中的这些步骤上使用w3:前缀:

<xsl:value-of select="count($allStations[
       w3:Nodes/w3:ChildNodes/w3:Name = 'Network B'])"/>

您当前的XSLT正在查找不在名称空间中的NodesChildNodesName元素,并且正确地确定没有。

相关内容

  • 没有找到相关文章

最新更新