当前位置: 代码迷 >> XML/SOAP >> 计算xml特定条件的节点个数,用xpath来,该如何解决
  详细解决方案

计算xml特定条件的节点个数,用xpath来,该如何解决

热度:447   发布时间:2012-04-12 15:46:35.0
计算xml特定条件的节点个数,用xpath来
有如下一个XML文件:
XML code
<A>
   <B>
        <SF1>b1-SF1-1</SF1>   
        <SF1>b1-SF1-2</SF1>
        <SF2>b1-SF2-1</SF2>
        <SF3>b1-SF3-1</SF3>
        <SF3>b1-SF3-2</SF3>
        <SF3>b1-SF3-3</SF3>
        <SF3>b1-SF3-4</SF3>
   </B>
   <B>
        <SF1>b2-SF1-1</SF1>   
        <SF1>b2-SF1-2</SF1>
        <SF2>b2-SF2-1</SF2>
        <SF3>b2-SF3-1</SF3>
        <SF3>b2-SF3-2</SF3>
        <SF3>b2-SF3-3</SF3>
        <SF3>b2-SF3-4</SF3>
   </B>
   <C>
        <SF1>c1-SF1-1</SF1>
        <SF4>c1-SF4-1</SF4>
        <D>test</D>
   </C>
   <E>EE</E>
   <SF4>root1></SF4>
   <SF2>root2></SF2>
</A>

计算以SF开头的节点个数,怎样计算啊?是用XML编程,如xpath,是动态的计算,谢谢!本人想到一个:<xsl:value-of select="count(//SF1) + count(//SF2) + count(//SF3) + count(//SF4)">,不过是静态的,不合要求。因为节点是通for-each动态生成的!

------解决方案--------------------
XML code
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(//node()[substring(name(),1,2)='SF'])" />
</xsl:template>
</xsl:stylesheet>

------解决方案--------------------
XML code
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(/A/B[position()=1]/node()[position()=3 or position()=4][substring(name(),1,2)='SF'])" />
<br/><br/>
<xsl:for-each select="/A/B[position()=1]/node()[position()=3 or position()=4]">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
<br/><br/>
<xsl:for-each select="/A/B[position()=2]/node()[position()=1 or position()=last()]">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
<br/><br/>
<xsl:for-each select="/A/SF2">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>