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

嵌套XSLT模板不';不会嵌套在结果XML文件中显示,xml,xslt,Xml,Xslt,我在使用XSLT嵌套元素时遇到问题 我读过,这似乎和我的问题一样,但我不能让它正常工作 我的XSLT(简化) 我希望SELL_TO项目将在CustomData标记之间呈现,但在输出的文件中(参见下面的结果),SELL_TO info将在CustomData标记之后呈现,甚至在Documentheader标记之后 <?xml version="1.0" encoding="UTF-8"?> <Root xmlns:xsd="http://www.w3.

我在使用XSLT嵌套元素时遇到问题

我读过,这似乎和我的问题一样,但我不能让它正常工作

我的XSLT(简化)


我希望SELL_TO项目将在CustomData标记之间呈现,但在输出的文件中(参见下面的结果),SELL_TO info将在CustomData标记之后呈现,甚至在Documentheader标记之后

        <?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(的一部分)


2019-09-10
6130
阿姆德
302-1961532-0413146
302-1961532-0413146
0
1.
1.
27.50
2019-09-10T17:36:19
6744
马克斯
马斯特曼
马克斯·穆斯特曼
班霍夫广场8号
66882
安斯巴赫
判定元件
049123456789
049 123456789
+49 123456789
最大值。mustermann@bahnhof.de
要将
SELL_to
的(处理结果)移动到
CustomerData
元素,您必须做两件事:

  • xsl:apply templates
    指令指向节点的正确路径- i、 e.改变:

    <CustomerData>
        <xsl:apply-templates select="SELL_TO"/>
    </CustomerData>
    
    否则将处理两次

    或者,更改说明:

    <xsl:apply-templates/>
    
    
    
    在您的主模板中:

    <xsl:apply-templates select="ORDER_LIST/ORDER/ORDER_DATA"/>
    
    
    

  • 我认为您需要展示XML。要使嵌套正常工作,
    SELL_to
    元素必须是
    ORDER_DATA
    的子元素,但您的问题表明它是同级元素。谢谢与你的问题无关,但是。。。避免使用
    xsl:for each
    的建议不是一个好建议。
    xsl:for-each
    指令是XSLT语言不可分割的一部分。在适当的时候使用它,避免信条。@TimC你是对的。卖给你的不是孩子而是兄弟姐妹。我更新了这个问题,并包含了源XML.@michael.hor257k。我已经读了很多关于这个问题的文章。这里说for each是不需要的,因为XSLT处理器将处理循环。@Stephan我更喜欢形成我自己的观点(上面总结)。我已经根据你的建议更改了XSLT,现在它可以工作了。此外,您还提到从默认处理顺序中删除SELL_TO元素,以避免对其进行两次处理。也谢谢你。在你之前的评论中,你说你对每一个都很有用。这对这个案子有什么影响?我没那么说。我说过,无论在何种情况下,避免使用它的建议都是错误的。在目前的情况下,差别很小。事实上,如果每个订单都有一个订单数据和一个销售对象,我会让我的模板与订单匹配(或者使用
    xsl:for each select=“ORDER”
    ),并将所有处理逻辑放在那里。你说得对,你没有这么说。谢谢你的澄清。阅读其他观点也很好。
    <CustomerData>
        <xsl:apply-templates select="../SELL_TO"/>
    </CustomerData>
    
    <xsl:template match="ORDER">
        <xsl:apply-templates select="ORDER_DATA"/>
    </xsl:template>
    
    <xsl:apply-templates/>
    
    <xsl:apply-templates select="ORDER_LIST/ORDER/ORDER_DATA"/>