计算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>