-- 作者:apple77
-- 发布时间:6/1/2008 1:05:00 PM
-- 用xsl生成XML树格式
各位前辈,刚学XML碰到如下问题,想了好久不知道错在哪,请大家指教,谢谢帮助。 任务:将一个xml文件从无层次格式(源文件格式)转到有层次格式(目标文件格式) 测试数据: 源XML文件 <?xml version="1.0" encoding="gb2312"?> <?xml-stylesheet type="text/xsl" href="test.xsl" ?> <tree_tests> <tree_test ID="1" PARENT_ID="0" NAME="ROOT " SIZE="0 " CHILDFLAG="T"/> <tree_test ID="2" PARENT_ID="1" NAME="A " SIZE="13 " CHILDFLAG="T"/> <tree_test ID="3" PARENT_ID="1" NAME="B " SIZE="23 " CHILDFLAG="T"/> <tree_test ID="4" PARENT_ID="1" NAME="C " SIZE="1 " CHILDFLAG="T"/> <tree_test ID="5" PARENT_ID="2" NAME="A.A1 " SIZE="34 " CHILDFLAG="T"/> <tree_test ID="6" PARENT_ID="2" NAME="A.A2 " SIZE="6 " CHILDFLAG="F"/> <tree_test ID="7" PARENT_ID="5" NAME="A.A1.1 " SIZE="7 " CHILDFLAG="T"/> <tree_test ID="8" PARENT_ID="5" NAME="A.A1.2 " SIZE="5 " CHILDFLAG="T"/> <tree_test ID="9" PARENT_ID="2" NAME="A.A3 " SIZE="3 " CHILDFLAG="F"/> <tree_test ID="10" PARENT_ID="3" NAME="B.B1 " SIZE="5 " CHILDFLAG="T"/> <tree_test ID="11" PARENT_ID="4" NAME="C.C1 " SIZE="6 " CHILDFLAG="F"/> <tree_test ID="12" PARENT_ID="10" NAME="B.B1.1 " SIZE="6 " CHILDFLAG="F"/> <tree_test ID="13" PARENT_ID="7" NAME="A.A1.1.a " SIZE="12 " CHILDFLAG="F"/> </tree_tests> 目标XML文件希望如下: <tree_test ID="1" NAME="ROOT" > <tree_test ID="2" NAME="A" > <tree_test ID="5" NAME="A.A1 "> <tree_test ID="7" NAME="A.A1.1 > <tree_test ID="13" NAME="A.A1.1.a "> <tree_test ID="8" NAME="A.A1.2 > <tree_test ID="6" NAME="A.A2 "> <tree_test ID="3" NAME="B" > <tree_test ID="10" NAME="B.B1" > <tree_test ID="12" NAME="B.B1.1" > <tree_test ID="4" NAME="C" > <tree_test ID="11" NAME="C.C1"> </tree_test> 我的XLS <?xml version="1.0" encoding="gb2312" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <xsl:call-template name="treetemplate"> <xsl:with-param name="parent_id" select="0"/> </xsl:call-template> </xsl:template> <xsl:template name="treetemplate"> <xsl:param name="parent_id"/> <xsl:for-each select="/tree_tests/tree_test[@PARENT_ID=$parent_id]"> <xsl:value-of select="." /> <!--不显示,因为无值--> <br/> <xsl:value-of select="$parent_id"/> <br/> Id: <xsl:value-of select="./@ID"/> <br/> PARENT_ID:<xsl:value-of select="./@PARENT_ID"/><br/> NAME: <xsl:value-of select="./@NAME"/><br/> SIZE: <xsl:value-of select="./@SIZE"/><br/> CHILDFLAG:<xsl:value-of select="./@CHILDFLAG"/> <br/> </xsl:for-each> <xsl:if test="CHILDFLAG='T'"> <xsl:call-template name="treetemplate"> <xsl:with-param name="parent_id" select="./@ID"/> </xsl:call-template> </xsl:if> </xsl:template> </xsl:stylesheet> 递归有问题,但我想不出问题在哪
|