XSLT元素循环
我的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
<!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&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”,必须由匹配的结束标记“”终止。请正确格式化代码。此外,请将其缩小到显示问题所需的最小数量。请正确设置代码格式。此外,请将其缩小到显示问题所需的最小数量。请正确设置代码格式。此外,请将其缩小到显示问题所需的最小金额。