我在使用 XSLT 嵌套元素时遇到问题。
我已经阅读了此处的输入链接描述,这似乎与我遇到的问题相同,但我无法让它正常工作。
我的 XSLT(简体(
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<!--https://www.onenaught.com/posts/23/xslt-tips-for-cleaner-code-and-better-performance#toc-avoid-xslfor-each-use-template-match -->
<xsl:template match="/">
<Root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.aca.nl/schema/weborder">
<Session GenerationDate="{format-dateTime(current-dateTime(),'[Y0001][M01][D01]T[H01]:[m01]:[s01]')}"
SessionNr=""
InterfaceRelease="3.0.0"
SessionId="">
</Session>
<xsl:apply-templates/>
</Root>
</xsl:template>
<xsl:template match="ORDER_DATA">
<DocumentHeader
DocumentNo="{TB_ID}"
ExternalRecordId="{TB_ID}"
ExternalWebshopId="{CHANNEL_SIGN}"
ExternalOrderNo="{TB_ID}"
PricesIncludingVat="1"
SequenceNumber="22221"
ExternalChannelIdentifier="4821476634">
<CustomerData>
<xsl:apply-templates select="SELL_TO"/>
</CustomerData>
</DocumentHeader>
</xsl:template>
<xsl:template match="SELL_TO">
<SellToData SellToSalutationCode=""
SellToFirstName="{FIRSTNAME}"
SellToMiddleName="*"
SellToSureName="{LASTNAME}"
SellToStreet="{STREET_NO}"
SellToPostCode="{ZIP}"
SellToHouseNo=""
SellToHouseNoAddition=""
SellToCity="{CITY}"
SellToCountry="{COUNTRY}"
SellToPhoneNo="{PHONE_PRIVATE}"
SellToEmail="{EMAIL}">
</SellToData>
</xsl:template>
</xsl:stylesheet>
我希望SELL_TO项将在自定义数据标签之间呈现,但在输出的文件中(请参阅下面的结果(,即使在 Documentheader 标签之后,SELL_TO信息也会在 CustomData 标签之后呈现。
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.aca.nl/schema/weborder">
<Session GenerationDate="20190927T11:29:01"
SessionNr=""
InterfaceRelease="3.0.0"
SessionId=""
/>
<DocumentHeader xmlns=""
DocumentNo="6130"
ExternalRecordId="6130"
ExternalWebshopId="amde"
ExternalOrderNo="6130"
PricesIncludingVat="1"
SequenceNumber="22221"
ExternalChannelIdentifier="4821476634">
<CustomerData/>
</DocumentHeader>
<SellToData xmlns=""
SellToSalutationCode=""
SellToFirstName="Max"
SellToMiddleName="*"
SellToSureName="Mustermann"
SellToStreet="Bahnhofsplatz 8"
SellToPostCode="66882"
SellToHouseNo=""
SellToHouseNoAddition=""
SellToCity="Ansbach"
SellToCountry="DE"
SellToPhoneNo="049123456789"
SellToEmail="max.mustermann@bahnhof.de"/>
</Root>
有人能说出我的 XSLT 代码出了什么问题吗?
更新:
输入 XML(部分(
<?xml version="1.0" encoding="UTF-8"?>
<ORDER_LIST>
<ORDER xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ORDER_DATA>
<ORDER_DATE>2019-09-10</ORDER_DATE>
<TB_ID>6130</TB_ID>
<CHANNEL_SIGN>amde</CHANNEL_SIGN>
<CHANNEL_ID>302-1961532-0413146</CHANNEL_ID>
<CHANNEL_NO>302-1961532-0413146</CHANNEL_NO>
<PAID>0</PAID>
<APPROVED>1</APPROVED>
<ITEM_COUNT>1</ITEM_COUNT>
<TOTAL_ITEM_AMOUNT>27.50</TOTAL_ITEM_AMOUNT>
<DATE_CREATED>2019-09-10T17:36:19</DATE_CREATED>
</ORDER_DATA>
<SELL_TO>
<TB_ID>6744</TB_ID>
<FIRSTNAME>Max</FIRSTNAME>
<LASTNAME>Mustermann</LASTNAME>
<NAME>Max Mustermann</NAME>
<STREET_NO>Bahnhofsplatz 8</STREET_NO>
<ZIP>66882</ZIP>
<CITY>Ansbach</CITY>
<COUNTRY>DE</COUNTRY>
<PHONE_PRIVATE>049123456789</PHONE_PRIVATE>
<PHONE_OFFICE>049 123456789</PHONE_OFFICE>
<PHONE_MOBILE>+49 123456789</PHONE_MOBILE>
<EMAIL>max.mustermann@bahnhof.de</EMAIL>
</SELL_TO>
</ORDER>
</ORDER_LIST>
为了将(处理的结果(SELL_TO
移动到CustomerData
元素,您必须做两件事:
-
将
xsl:apply-templates
指令指向节点的正确路径 - 即更改:<CustomerData> <xsl:apply-templates select="SELL_TO"/> </CustomerData>
自:
<CustomerData> <xsl:apply-templates select="../SELL_TO"/> </CustomerData>
-
从默认处理顺序中删除
SELL_TO
元素 添加以下模板:<xsl:template match="ORDER"> <xsl:apply-templates select="ORDER_DATA"/> </xsl:template>
否则,它将被处理两次。
或者,更改指令:
<xsl:apply-templates/>
在主模板中:
<xsl:apply-templates select="ORDER_LIST/ORDER/ORDER_DATA"/>