如何使用XSLT更改节点位置

时间:2014-09-04 06:42:02

标签: xslt

我遇到的XML Web响应有问题。内部循环warehouseItems有一个节点leadTimeCumulative和leadTimeDays来自第一个和第二个位置的第一个时间,其余为它的最后一个。我需要将这些节点始终保持在Loop的最后位置。

实施例

<Envelope>
  <Body>
    <searchItemResponse>
      <status>
        <statusCode>Success</statusCode>
      </status>
      <itemList>
        <itemWithWarehouses>
          <item>
            <originOfData>SME</originOfData>
            <itemNumbers>
               <shortNumber>115632</shortNumber>
               <tssArticleNumber>PT0401450-T46N</tssArticleNumber>
          </item>
          <warehouseItems>
             <leadTimeCumulative>14</leadTimeCumulative>
             <leadTimeDays>14</leadTimeDays>
             <warehouse>
               <code>GA01</code>
             </warehouse>-
             <stockItem>-
                <quantities>
                   <quantityAvailable>0</quantityAvailable>
                   <quantityOnHand>0</quantityOnHand>
                </quantities>
             </stockItem>-
             <stockClass>
                <group>MTO</group>
             </stockClass>
          </warehouseItems>-
          <warehouseItems>-
             <warehouse>
                <code>GL01</code>
             </warehouse>-
             <stockItem>-
                <quantities>
                   <quantityAvailable>0</quantityAvailable>
                   <quantityOnHand>0</quantityOnHand>
                </quantities>
             </stockItem>-
             <stockClass>
                <group>MTO</group>
             </stockClass>
             <leadTimeCumulative>14</leadTimeCumulative>
             <leadTimeDays>14</leadTimeDays>
          </warehouseItems>-
          <warehouseItems>-
             <warehouse>
                <code>GS01</code></warehouse>-
             <stockItem>-
                <quantities>
                  <quantityAvailable>0</quantityAvailable>
                  <quantityOnHand>0</quantityOnHand>
                </quantities>
             </stockItem>-
             <stockClass>
                <group>MTO</group>
             </stockClass>
             <leadTimeCumulative>10</leadTimeCumulative>
             <leadTimeDays>10</leadTimeDays>
             </warehouseItems>-
        </itemWithWarehouses>
      </itemList>
    </searchItemResponse>
  </Body>
</Envelope>

我需要任何XSLT来将节点leadTimeCumulative和leadTimeDays的位置更改为Last,就像循环结构的其余部分一样。请帮帮我。

以上部分解决了。 我需要一个改进.tssArticleNumber节点需要复制到具有不同节点名称的相应仓库项目,如&#34;项目编号&#34;。请给我另一个XSLT。感谢

1 个答案:

答案 0 :(得分:0)

尝试以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

    <xsl:strip-space elements="*"/>

    <!-- this is called an identity template -->
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <!-- a template to override warehouseItems -->    
    <xsl:template match="warehouseItems">
        <xsl:copy>
            <!-- apply templates except leadTimeCumulative and leadTimeDays -->
            <xsl:apply-templates select="node()[not(self::leadTimeCumulative) and not(self::leadTimeDays)]|@*"/>
            <Item_No><xsl:value-of select="../item//tssArticleNumber"/></Item_No>
            <xsl:apply-templates select="leadTimeCumulative"/>
            <xsl:apply-templates select="leadTimeDays"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>