嵌套XSLT模板不';不会嵌套在结果XML文件中显示
我在使用XSLT嵌套元素时遇到问题 我读过,这似乎和我的问题一样,但我不能让它正常工作 我的XSLT(简化)嵌套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.
我希望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"/>