XSLT引用根元素

时间:2013-02-12 22:53:06

标签: xml parsing xslt

我从XML文件中提取数据。我正在使用xsltproc,xml版本1.0的linux盒子上工作。该文件包含列车信息。我有一个带有货车和集装箱的发动机。火车可以有多个货车,而货车可以有多个货箱。我希望在下面的文件中引用MSGHEADERCONTENT到每个WAGON和每个容器。

给我

    MSGHEADER Data MSGHEADER CONTENT Data CONTENT ; WAGON 1 Data WAGON 1 ;
    CONTAINER 1:1 Data CONTAINER 1:1 ; MSGHEADER Data MSGHEADER CONTENT Data CONTENT ;
     WAGON 1 Data WAGON 1 ; CONTAINER 1:2 Data CONTAINER 1:2 MSGHEADER Data MSGHEADER ;
     CONTENT Data CONTENT ; WAGON 2 Data WAGON 2 ; CONTAINER 2:1 Data CONTAINER 2:1 ; 
     MSGHEADER Data MSGHEADER ; CONTENT Data CONTENT ; WAGON 2 Data WAGON 2 ;
      CONTAINER 2:2 Data CONTAINER 2:2

等等货车和集装箱的数量可能会有所不同。我需要从文件中提取大部分信息

我希望这是有道理的。我花了相当多的时间尝试各种方法,但我的排序或遍历树永远不会成功,我得到重复的根信息值。我可以让它以时尚的方式发挥作用。如果我在容器上执行for-each,从树的底部开始,然后使用模板从上到下工作。从MSGHEADER返回到CONTANER。当货车没有集装箱时,这给我留下了一个问题。他们错过了。当我对货车进行节点检查测试,看看哪个没有容器和调用模板时,它没有像我希望的那样运行。

我的代码示例。

<xsl:template match="/MESSAGE">
<xsl:for-each select="//CONTAINER" >
{<xsl:call-template name="messageIdentifier" />;
<xsl:call-template name="FormatDate"><xsl:with-param
      name="DateTime"select="/MESSAGE/MSGHEADER/MSGDTM"/>;     
<xsl:call-template name="stowagePosition">
            <xsl:with-param select="STATUS/WAGONS/WAGON/CONTAINERS/CONTAINER/ISO"   
             name="ISO"></xsl:with-param><xsl:with-param
             select="/MESSAGE/STATUS/WAGONS/WAGON/WAGONCLASS" name="wagonClass"></xsl:with-param>
            <xsl:with-param select="/MESSAGE/STATUS/WAGONS/WAGON/CONTAINERS/CONTAINER/WAGONPOS"  
            name="wagonPos"></xsl:with-param></xsl:call-template><xsl:value-of 
            select="CONTAINERID"/>;<xsl:value-of select="WAGONPOS"/>}</xsl:for-each>        
    <xsl:for-each select="//CONTAINERS" >
</xsl:template>



<MESSAGE>
  <MSGHEADER>
     <MSGVERSION>001</MSGVERSION>
     <MSGID>DISCHARGE LIST</MSGID>
     <MSGDTM>06 DEC 2012 04:17:18</MSGDTM>
     <MSGSENDER>FL</MSGSENDER>
  </MSGHEADER>
  <CONTENT>
     <TOCCODE>FL</TOCCODE>
     <TOCREFERENCE>4MXXXXX</TOCREFERENCE>
  </CONTENT>
  <STATUS>
      <SLOTARRIVAL>07 DEC 2012 12:09:00</SLOTARRIVAL>
      <HEADCODE>4MXX</HEADCODE>
      <ORIGINCODE>GBCBG</ORIGINCODE>
  <WAGONS>
    <WAGON>
        <WAGONID>12345</WAGONID>
        <WAGONORDER>1</WAGONORDER>
         <WAGONCLASS>IKA</WAGONCLASS>
        <CONTAINERS>
             <CONTAINER>
                 <CONTAINERID>1000002</CONTAINERID>
                 <ISO>30XX</ISO>
                 <HAZ>N</HAZ>
              </CONTAINER>
              <CONTAINER>
                <CONTAINERID>1000003</CONTAINERID>
                <ISO>30S1</ISO>
                <HAZ>N</HAZ>
               </CONTAINER>
            </CONTAINERS>
          </WAGON>
          <WAGON>
            <WAGONID>12346</WAGONID>
            <WAGONORDER>2</WAGONORDER>
            <WAGONCLASS>IKA</WAGONCLASS>
            <CONTAINERS>
              <CONTAINER>
                <CONTAINERID>1000004</CONTAINERID>
                <ISO>30S2</ISO>
                <HAZ>N</HAZ>
              </CONTAINER>
              <CONTAINER>
                <CONTAINERID>1000005</CONTAINERID>
                <ISO>45XX</ISO>
                <HAZ>N</HAZ>
              </CONTAINER>
            </CONTAINERS>
          </WAGON>
      </STATUS>
    </MESSAGE>

0 个答案:

没有答案