如何获取任何子值的出现次数。从下面的代码我有子值<Name>Network B</Name>
即"网络B"。现在如何查找有多少操作站节点具有此值。
<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
, ChildNodes
和Name
)都属于这个名称空间,所以您也需要在路径中的这些步骤上使用w3:
前缀:
<xsl:value-of select="count($allStations[
w3:Nodes/w3:ChildNodes/w3:Name = 'Network B'])"/>
您当前的XSLT正在查找不在名称空间中的Nodes
、ChildNodes
和Name
元素,并且正确地确定没有。