嵌套的 XSLT 模板不会在结果 XML 文件中嵌套显示



我在使用 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元素,您必须做两件事:

  1. xsl:apply-templates指令指向节点的正确路径 - 即更改:

    <CustomerData>
    <xsl:apply-templates select="SELL_TO"/>
    </CustomerData>
    

    自:

    <CustomerData>
    <xsl:apply-templates select="../SELL_TO"/>
    </CustomerData>
    
  2. 从默认处理顺序中删除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"/>
    

相关内容

  • 没有找到相关文章