以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  新手求助:XML实现嵌套??  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=56218)


--  作者:haoadele
--  发布时间:11/30/2007 9:46:00 AM

--  新手求助:XML实现嵌套??
各位大侠,

小弟初学XML,想实现如下转换却总是出错,请帮忙看一下是哪里的问题,不胜感激!

<?xml version="1.0"?>
<DataSetCollection xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <DataSet Name="151540WFG0017B" Type="Metrology Lot Run" Version="5.2.0" CreateTime="20070207152322">
    <Data>
      <Class ClassNumber="1" LocationX="0.3" LocationY="10.2">
      </Class>
      <Class ClassNumber="2" LocationX="10.2" LocationY="10.2">
      </Class>
      <A ANumber="50">
        <Test X="0" Y="1" TestN="1">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="2" TestN="1">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="3" TestN="1">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="1" TestN="2">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="2" TestN="2">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="3" TestN="2">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
      </A>
      <A ANumber="51">
        <Test X="0" Y="1" TestN="1">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="2" TestN="1">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="3" TestN="1">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="1" TestN="2">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="2" TestN="2">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
        <Test X="0" Y="3" TestN="2">
          <C Value1="xx" Value2="xx" Value3="xx" Value4="xx"
        </Test>
      </A>
    </Data>
   </DataSet>
</DataSetCollection>

==> 转化为:
ANumber:50

TestN: 1
Location X: 0.3    Location Y: 10.2

X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx
0 2 xx xx xx xx
0 3 xx xx xx xx

TestN: 2
Location X: 10.2    Location Y: 10.2

X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx
0 2 xx xx xx xx
0 3 xx xx xx xx

ANumber:51

TestN: 1
Location X: 0.3    Location Y: 10.2

X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx
0 2 xx xx xx xx
0 3 xx xx xx xx

TestN: 2
Location X: 10.2    Location Y: 10.2

X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx
0 2 xx xx xx xx
0 3 xx xx xx xx

我的程序如下:


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
 <xsl:output method="text"/>

<xsl:template match="DataSet">
<xsl:for-each select="Data/A">
ANumber<xsl:value-of select="@ANumber"/>
<xsl:for-each select="Test[TestN='1']">
TestN:<xsl:value-of select="Test/@TestN"/>
Location X:<xsl:value-of select="//DataSetCollection/DataSet/Data/Class[1]/@LocationX"/>     Location Y:<xsl:value-of select="//DataSetCollection/DataSet/Data/Class[1]/@LocationY"/>
X Y Value1 Value2 Value3 Value4
<xsl:for-each select="Test"> 
<xsl:value-of select="@X"/> <xsl:text> </xsl:text>  
<xsl:value-of select="@Y"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value1"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value2"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value3"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value4"/> <xsl:text> </xsl:text>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
<xsl:for-each select="Test[TestN='2']">
TestN:<xsl:value-of select="Test/@TestN"/>
Location X:<xsl:value-of select="//DataSetCollection/DataSet/Data/Class[2]/@LocationX"/>     Location Y:<xsl:value-of select="//DataSetCollection/DataSet/Data/Class[2]/@LocationY"/>
X Y Value1 Value2 Value3 Value4
<xsl:for-each select="Test"> 
<xsl:value-of select="@X"/> <xsl:text> </xsl:text>  
<xsl:value-of select="@Y"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value1"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value2"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value3"/> <xsl:text> </xsl:text>
<xsl:value-of select="C/@Value4"/> <xsl:text> </xsl:text>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
却总是得到这样的结果:(
ANumber:50

TestN: 1
Location X: 0.3    Location Y: 10.2

X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx    --The Value of TestN:1 in ANumber50
0 2 xx xx xx xx
0 3 xx xx xx xx
0 1 xx xx xx xx    --The Value of TestN:2 in ANumber50
0 2 xx xx xx xx
0 3 xx xx xx xx

TestN: 2
Location X: 10.2    Location Y: 10.2
X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx    --The Value of TestN:1 in ANumber50
0 2 xx xx xx xx
0 3 xx xx xx xx
0 1 xx xx xx xx    --The Value of TestN:2 in ANumber50
0 2 xx xx xx xx
0 3 xx xx xx xx

ANumber:51

TestN: 1
Location X: 0.3    Location Y: 10.2
X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx    --The Value of TestN:1 in ANumber51
0 2 xx xx xx xx
0 3 xx xx xx xx
0 1 xx xx xx xx    --The Value of TestN:2 in ANumber51
0 2 xx xx xx xx
0 3 xx xx xx xx

TestN: 2
Location X: 10.2    Location Y: 10.2
X Y Value1 Value2 Value3 Value4
0 1 xx xx xx xx    --The Value of TestN:1 in ANumber51
0 2 xx xx xx xx
0 3 xx xx xx xx
0 1 xx xx xx xx    --The Value of TestN:2 in ANumber51
0 2 xx xx xx xx
0 3 xx xx xx xx


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms