有如下一个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>