对每个孩子重复相同的父节点

时间:2014-04-01 19:53:19

标签: xslt-1.0

我有以下问题,我是XSLT的新手。 我想通过XSLT 1.0中的XSLT将输入XML转换为输出XML。

输入xml如下所示: -

<CardLoadRequest   
             version="1.0"
             fileType="XXX"
             designator="VS"  
             flightNumber="XX"  
             suffix="-"  
             flightPaymentIdentifier="2XXXXX"  
             creationDateTime="2014-01-27T10:41:12+00:00"  
             legNumber="1"  
             legOrigin="LXX"  
             legDestination="BXX"  
             flightDate="2014-02-27+00:00"   
             isoCurrencyCode="USD">    
  <CrewCardLoad employeePayrollNumber="407XXX" crewPaymentIdentifier="XXXXXXX"     amount="0.01"></CrewCardLoad>    

  <CrewCardLoad employeePayrollNumber="408XXX" crewPaymentIdentifier="XXXXXXX"   amount="0.01"></CrewCardLoad>    
  <CrewCardLoad employeePayrollNumber="409XXX" crewPaymentIdentifier="XXXXXXX" amount="0.01"></CrewCardLoad>    
</CardLoadRequest>    

输出XML如下所示: -

<CardLoadRequest>  
<cardLoads>  
<cardLoad>  
  <FinanicalData>  
    <empid>407XXX</empid>  
    <cardID>XXXXX</cardID>  
    <PaymentIdentifier>XXXXXXX</PaymentIdentifier>
    <amount>0.01</amount>
  </FinanicalData>  

  <NonFinanicalData>  
    <id>fileType</id>  
    <Value>VAACardLoad</Value>  
  </NonFinanicalData>  
  <NonFinanicalData>  
    <id>designator</id>
    <Value>VS</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>flightNumber</id>
    <Value>XX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>suffix</id>
    <Value>XX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>flightPaymentIdentifier</id>
    <Value>2XXXXX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>creationDateTime</id>  
    <Value>2014-01-27T10:41:12+00:00</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legNumber</id>
    <Value>1</Value>
  </NonFinanicalData>  
  <NonFinanicalData>  
    <id>legOrigin</id>  
    <Value>LXX</Value>  
  </NonFinanicalData>  
  <NonFinanicalData>  
    <id>legDestination</id>  
    <Value>BXX</Value>  
  </NonFinanicalData>  

  <NonFinanicalData>  
    <id>flightDate</id>  
    <Value>2014-02-27+00:00</Value>  
  </NonFinanicalData>  
  <NonFinanicalData>  
    <id>isoCurrencyCode</id>  
    <Value>USD</Value>  
  </NonFinanicalData>  

</cardLoad>  

 <cardLoad>
  <FinanicalData>
    <empid>408XXX</empid>
    <cardID>XXXXX</cardID>
    <PaymentIdentifier>XXXXXXX</PaymentIdentifier>
    <amount>0.01</amount>
  </FinanicalData>

  <NonFinanicalData>
    <id>fileType</id>
    <Value>VAACardLoad</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>designator</id>
    <Value>VS</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>flightNumber</id>
    <Value>XX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>suffix</id>
    <Value>XX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>flightPaymentIdentifier</id>
    <Value>2XXXXX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>creationDateTime</id>
    <Value>2014-01-27T10:41:12+00:00</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legNumber</id>
    <Value>1</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legOrigin</id>
    <Value>LXX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legDestination</id>
    <Value>BXX</Value>
  </NonFinanicalData>

  <NonFinanicalData>
    <id>flightDate</id>
    <Value>2014-02-27+00:00</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>isoCurrencyCode</id>
    <Value>USD</Value>
  </NonFinanicalData>

    </cardLoad>    

<cardLoad>
  <FinanicalData>
    <empid>409XXX</empid>
    <cardID>XXXXX</cardID>
    <PaymentIdentifier>XXXXXXX</PaymentIdentifier>
    <amount>0.01</amount>
  </FinanicalData>

  <NonFinanicalData>
    <id>fileType</id>
    <Value>VAACardLoad</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>designator</id>
    <Value>VS</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>flightNumber</id>
    <Value>XX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>suffix</id>
    <Value>XX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>flightPaymentIdentifier</id>
    <Value>2XXXXX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>creationDateTime</id>
    <Value>2014-01-27T10:41:12+00:00</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legNumber</id>
    <Value>1</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legOrigin</id>
    <Value>LXX</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>legDestination</id>
    <Value>BXX</Value>
  </NonFinanicalData>

  <NonFinanicalData>
    <id>flightDate</id>
    <Value>2014-02-27+00:00</Value>
  </NonFinanicalData>
  <NonFinanicalData>
    <id>isoCurrencyCode</id>
    <Value>USD</Value>
  </NonFinanicalData>

    </cardLoad>  
  </cardLoads>    

</CardLoadRequest>  

请注意,父母相同且重复,但孩子不同。 即使NonFinanical数据可以放入属性,这将解决我的问题。

到目前为止我所做的事情如下: -

        <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"></xsl:output>

    <xsl:template match="/">
        <xsl:apply-templates></xsl:apply-templates>
    </xsl:template>


    <xsl:template match="@*">
        <xsl:copy-of select="node()"></xsl:copy-of>

    </xsl:template>


    <xsl:template name="CrewCardLoad" match="CrewCardLoad">
        <CardLoadRequest>
            <CardLoad>
                <!--NonFinancial Data-->
                <NonFinancialData>
                    <xsl:apply-templates select="@*"></xsl:apply-templates>
                </NonFinancialData>

                <!--Financial Data-->
                <FinancialData>
                    <xsl:element name="empid">
                        <xsl:value-of select="@employeePayrollNumber"></xsl:value-of>
                    </xsl:element>

                    <xsl:element name="cardid">
                        <xsl:value-of select="@cardID"></xsl:value-of>
                    </xsl:element>
                    <xsl:element name="paymentidentifier">
                        <xsl:value-of select="@crewPaymentIdentifier"></xsl:value-of>
                    </xsl:element>
                    <xsl:element name="amount">
                        <xsl:value-of select="@amount"></xsl:value-of>
                    </xsl:element>
                </FinancialData>
            </CardLoad>
        </CardLoadRequest>
    </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

请尝试以下样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"></xsl:output>

    <xsl:template match="/">
        <CardLoadRequest>
            <cardLoads>
                <xsl:for-each select="CardLoadRequest/CrewCardLoad">
                    <cardLoad>
                        <FinanicalData>
                            <empid><xsl:value-of select="@employeePayrollNumber"/></empid>
                            <!-- where did you get this data? -->
                            <cardID>XXXXX</cardID>
                            <PaymentIdentifier><xsl:value-of select="@crewPaymentIdentifier"/></PaymentIdentifier>
                            <amount><xsl:value-of select="@amount"/></amount>
                        </FinanicalData>
                        <xsl:for-each select="../@*[not(name()='version')]">
                            <NonFinanicalData>
                                <id><xsl:value-of select="name()"/></id>
                                <Value><xsl:value-of select="."/></Value>
                            </NonFinanicalData>
                        </xsl:for-each>
                    </cardLoad>
                </xsl:for-each>
            </cardLoads>
        </CardLoadRequest>
    </xsl:template>

</xsl:stylesheet>

此输出:

<CardLoadRequest xmlns:fo="http://www.w3.org/1999/XSL/Format">
   <cardLoads>
      <cardLoad>
         <FinanicalData>
            <empid>407XXX</empid>
            <cardID>XXXXX</cardID>
            <PaymentIdentifier>XXXXXXX</PaymentIdentifier>
            <amount>0.01</amount>
         </FinanicalData>
         <NonFinanicalData>
            <id>fileType</id>
            <Value>XXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>designator</id>
            <Value>VS</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightNumber</id>
            <Value>XX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>suffix</id>
            <Value>-</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightPaymentIdentifier</id>
            <Value>2XXXXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>creationDateTime</id>
            <Value>2014-01-27T10:41:12+00:00</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legNumber</id>
            <Value>1</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legOrigin</id>
            <Value>LXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legDestination</id>
            <Value>BXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightDate</id>
            <Value>2014-02-27+00:00</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>isoCurrencyCode</id>
            <Value>USD</Value>
         </NonFinanicalData>
      </cardLoad>
      <cardLoad>
         <FinanicalData>
            <empid>408XXX</empid>
            <cardID>XXXXX</cardID>
            <PaymentIdentifier>XXXXXXX</PaymentIdentifier>
            <amount>0.01</amount>
         </FinanicalData>
         <NonFinanicalData>
            <id>fileType</id>
            <Value>XXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>designator</id>
            <Value>VS</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightNumber</id>
            <Value>XX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>suffix</id>
            <Value>-</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightPaymentIdentifier</id>
            <Value>2XXXXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>creationDateTime</id>
            <Value>2014-01-27T10:41:12+00:00</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legNumber</id>
            <Value>1</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legOrigin</id>
            <Value>LXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legDestination</id>
            <Value>BXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightDate</id>
            <Value>2014-02-27+00:00</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>isoCurrencyCode</id>
            <Value>USD</Value>
         </NonFinanicalData>
      </cardLoad>
      <cardLoad>
         <FinanicalData>
            <empid>409XXX</empid>
            <cardID>XXXXX</cardID>
            <PaymentIdentifier>XXXXXXX</PaymentIdentifier>
            <amount>0.01</amount>
         </FinanicalData>
         <NonFinanicalData>
            <id>fileType</id>
            <Value>XXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>designator</id>
            <Value>VS</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightNumber</id>
            <Value>XX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>suffix</id>
            <Value>-</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightPaymentIdentifier</id>
            <Value>2XXXXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>creationDateTime</id>
            <Value>2014-01-27T10:41:12+00:00</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legNumber</id>
            <Value>1</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legOrigin</id>
            <Value>LXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>legDestination</id>
            <Value>BXX</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>flightDate</id>
            <Value>2014-02-27+00:00</Value>
         </NonFinanicalData>
         <NonFinanicalData>
            <id>isoCurrencyCode</id>
            <Value>USD</Value>
         </NonFinanicalData>
      </cardLoad>
   </cardLoads>
</CardLoadRequest>

如果您不打算使用它,请删除样式表中的xmlns:fo="http://www.w3.org/1999/XSL/Format"

P.S。你欠我一杯咖啡。 :d