XSLT元素循环

XSLT元素循环,xslt,Xslt,我的XSLT就像 <!DOCTYPE stylesheet [ <!ENTITY hyphen "<xsl:text>-</xsl:text>"> <!ENTITY cr "<xsl:text> </xsl:text>"> ]> <xsl:stylesheet id="test" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="h

我的XSLT就像

<!DOCTYPE stylesheet [
<!ENTITY hyphen "<xsl:text>-</xsl:text>">
<!ENTITY cr "<xsl:text>
</xsl:text>">
]>

<xsl:stylesheet id="test" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ext="http://exslt.org/common"
exclude-result-prefixes="ext"
version="1.0">

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:variable name="vc_NDCROI" select="'NDC05'" />

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

<xsl:template match="node()|@*" mode="mPass2">
     <xsl:copy>
         <xsl:apply-templates select="node()|@*" mode="mPass2"/>
     </xsl:copy>
</xsl:template>

<xsl:template match="/">
    <xsl:variable name="vrtfPass1Result">
        &cr;
        <xsl:comment>ACS&amp;T
            Receipt Confirmation
            </xsl:comment>
            &cr;
            <xsl:element name="Batch">
            <xsl:element name="ASN">
            <xsl:for-each
            select="dcsextractdata/dataheaders/dataheader[record_type = 'ORH']">
            <xsl:apply-templates select="." mode="orh_receipt" />
            </xsl:for-each>
            </xsl:element>

    </xsl:element>
            </xsl:variable>

        <xsl:apply-templates mode="mPass2"
                    select="ext:node-set($vrtfPass1Result)/*" />
                        </xsl:template>


<xsl:template match="/*[local-name()='Batch']" mode="mPass2">
    &cr;
            <Batch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                                     <xsl:copy-of select="node()|@*"/>
                                             </Batch>
                                                  </xsl:template>

<xsl:template match="dataheader" mode="orh_receipt">

<xsl:element name="BatchReferences">
    <xsl:element name="SenderCode"><xsl:value-of select="site_user_def_type_7"/></xsl:element>

    <xsl:element name="ReceiverCode"><xsl:value-of select="client_user_def_type_7" /> </xsl:element>
        </xsl:element>  

<xsl:element name="Supplier">
    <xsl:element name="EanCode"><xsl:value-of select="client_name" /> </xsl:element>
        </xsl:element>

<xsl:element name="Customer">
<xsl:element name="EanCode"></xsl:element>
<xsl:element name="EDI1Code"></xsl:element>
<xsl:element name="EDI2Code"></xsl:element>
<xsl:element name="EDI3Code"></xsl:element>
<xsl:element name="EDI4Code"></xsl:element>
</xsl:element>

<xsl:element name="Consignee">
    <xsl:element name="EanCode"><xsl:value-of select="add_user_def_type_1" /> </xsl:element>
        </xsl:element>

<xsl:choose>
<xsl:when test="user_def_chk_1 != 'Y'">
<xsl:element name="Consignor">
    <xsl:element name="EanCode"></xsl:element>
    </xsl:element>
</xsl:when>
<xsl:otherwise> 
<xsl:element name="Consignor">
    <xsl:element name="EanCode">5060133990239</xsl:element>
    </xsl:element>  
</xsl:otherwise>        
</xsl:choose>

<xsl:element name="DeliverFrom">
    <xsl:element name="EanCode"></xsl:element>
        </xsl:element>

<xsl:element name="DeliverTo">
    <xsl:element name="EanCode"><xsl:value-of select="add_user_def_type_1" /> </xsl:element>
        </xsl:element>  

<xsl:element name="DocumentNumber"><xsl:value-of select="user_def_type_1" /> </xsl:element>


<xsl:element name="DocumentDate"><xsl:value-of select="creation_date" /> </xsl:element>


<xsl:element name="ShippingDate"><xsl:value-of select="creation_date" /> </xsl:element>


<xsl:choose>
<xsl:when test="user_def_chk_1 != 'Y'">
<xsl:element name="Carrier">
    <xsl:element name="SuppliersCode"></xsl:element>
    </xsl:element>
</xsl:when>                                                                    
<xsl:otherwise> 
<xsl:element name="Carrier">
    <xsl:element name="SuppliersCode">5060133990239</xsl:element>
    </xsl:element>  
</xsl:otherwise>        
</xsl:choose>           

<xsl:element name="OrderNumber">
    <xsl:element name="Customers"><xsl:value-of select="order_id" /> </xsl:element>
        </xsl:element>  

<xsl:element name="OrderDate">
    <xsl:element name="Customers"><xsl:value-of select="order_date" /> </xsl:element>
        </xsl:element>

<xsl:element name="ShipmentNumber"><xsl:value-of select="user_def_type_2" /> </xsl:element>

<xsl:element name="PickListNumber"><xsl:value-of select="user_def_type_3" /> </xsl:element>


<xsl:element name="Package">
<xsl:element name="Markings">
    <xsl:element name="Barcode"><xsl:value-of select="user_def_type_1" /> </xsl:element>
        </xsl:element>

        </xsl:element>
<xsl:for-each select="datalines/dataline[record_type = 'ORL']" >
                <xsl:apply-templates select="." mode="lines" />
                                        </xsl:for-each>



<xsl:template match="dataline" mode="lines">
    <xsl:element name="Product">

    <xsl:element name="LineNumber"><xsl:value-of select="user_def_num_1" /> </xsl:element>

    <xsl:element name="EANCode"><xsl:value-of select="ean" /> </xsl:element>
    <xsl:element name="SuppliersCode"><xsl:value-of select="sku_id" /> </xsl:element>
    <xsl:element name="Quantity">
    <xsl:element name="Amount"><xsl:value-of select="qty_shipped" /> </xsl:element> 
    </xsl:element>  
    <xsl:element name="CreationDate">0001-01-01</xsl:element>
    <xsl:element name="ExpiresDate"></xsl:element>
    <xsl:element name="CustomerPalStatus"><xsl:value-of select="condition_id" /> </xsl:element>
    <xsl:element name="Markings">
    <xsl:element name="Barcode"><xsl:value-of select="batch_id" /> </xsl:element>
    <xsl:element name="InitialPalletQty"></xsl:element>
    <xsl:element name="Batch"><xsl:value-of select="batch_id" /> </xsl:element>
    </xsl:element>
    </xsl:element>



</xsl:template>

</xsl:template> 

</xsl:stylesheet>

]>
&铬;
ACS&;T
收货确认书
&铬;
&铬;
5060133990239
5060133990239
0001-01-01

我有行循环,我有从标记标记之前开始的包标记,现在包标记在标记标记之后关闭,但应该在产品标记之后和ASN关闭标记之前关闭。请帮助。

您需要了解您的模式

目前,ASN标签在顶部打开和关闭,包装朝底部打开和关闭(包裹在标记周围),产品在最底部打开和关闭

对于在产品之后和ASN之前关闭的包装,要求ASN包裹在包装和产品周围。并将产品包装起来

因此,将
和相应的
标记移动到所需的层次结构:

<xsl:element name="ASN">
   ...
   <xsl:element name="Package">
       ...
       <xsl:element name="Product"> 
       ...  
       </xsl:element>  <!-- Product's closing -->
   </xsl:element>  <!-- Package's closing -->  
</xsl:element>  <!-- ASN's closing -->

</xsl:template>
</xsl:template>
</xsl:stylesheet>

...
...
...  

您需要了解您的模式

目前,ASN标签在顶部打开和关闭,包装朝底部打开和关闭(包裹在标记周围),产品在最底部打开和关闭

对于在产品之后和ASN之前关闭的包装,要求ASN包裹在包装和产品周围。并将产品包装起来

因此,将
和相应的
标记移动到所需的层次结构:

<xsl:element name="ASN">
   ...
   <xsl:element name="Package">
       ...
       <xsl:element name="Product"> 
       ...  
       </xsl:element>  <!-- Product's closing -->
   </xsl:element>  <!-- Package's closing -->  
</xsl:element>  <!-- ASN's closing -->

</xsl:template>
</xsl:template>
</xsl:stylesheet>

...
...
...  

我尝试过,但在这种情况下,我有了改进,比如让包在标记之前从开始,在倒数第二个之前结束,但它会给出错误。由于我只需要在标记之前开始包,所以我只需要在标记之前开始包,在ASN关闭标记之前结束包。在中,元素必须有关闭标记,并且必须正确嵌套。不要在
之间移动结束标记,而是在
之间移动结束标记。我做了相应的更新。由于语法规则,ASN必须环绕包,以便包在其中关闭。所以,正如我的回答所提到的,将Package和ASN的结束元素标记移到末尾,但在模板结束之前。谢谢回复,我确实喜欢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。但是获取错误,如(错误位置未知)XSLT错误获取错误,如元素类型“xsl:template”必须由匹配的结束标记“”终止。我尝试过,但在这种情况下,我有了改进,如让包在标记之前开始,在最后一秒之前结束,但它给出了错误。由于我只需要在标记之前开始包,所以我只需要在标记之前开始包,在ASN关闭标记之前结束包。在中,元素必须有关闭标记,并且必须正确嵌套。不要在
之间移动结束标记,而是在
之间移动结束标记。我做了相应的更新。由于语法规则,ASN必须环绕包,以便包在其中关闭。所以,正如我的回答所提到的,将Package和ASN的结束元素标记移到末尾,但在模板结束之前。谢谢回复,我确实喜欢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。但是获取错误,如(错误位置未知)XSLT错误获取错误,如元素类型“xsl:template”必须由匹配的结束标记“”终止。我尝试过,但在这种情况下,我有了改进,如让包在标记之前开始,在最后一秒之前结束,但它给出了错误。由于我只需要在标记之前开始包,所以我只需要在标记之前开始包,在ASN关闭标记之前结束包。在中,元素必须有关闭标记,并且必须正确嵌套。不要在
之间移动结束标记,而是在
之间移动结束标记。我做了相应的更新。由于语法规则,ASN必须环绕包,以便包在其中关闭。所以,正如我的回答所提到的,将Package和ASN的结束元素标记移到末尾,但在模板结束之前。谢谢回复,我确实喜欢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。但是获取错误,如(错误位置未知)XSLT错误获取错误,如元素类型“xsl:template”,必须由匹配的结束标记“”终止。请正确格式化代码。此外,请将其缩小到显示问题所需的最小数量。请正确设置代码格式。此外,请将其缩小到显示问题所需的最小数量。请正确设置代码格式。此外,请将其缩小到显示问题所需的最小金额。