【发布时间】:2021-01-20 12:42:29
【问题描述】:
我有一个下面给定的输入 xml,我想在其中 复制 元素 event:business 和 event:Order 但只有 common:AddList 和 common:Date 在 event:Order 下而不是将所有元素都放入我的最终 xml p>
输入 XML:-
<event:Event>
<event:EventDetails>
<event:Order>
<common:Date>2021-01-19T13:15:40.526Z</common:Date>
<common:AddList>
<common:AddData content="blah blah" key="blahblah"/>
<common:AddData content="blah blah" key="blahblah"/>
</common:AddList>
<data:User>
<data:Key>1</data:Key>
</data:User>
</event:Order>
<event:business>
<common:Legacy>
<common:TA>1</common:TA>
</common:Legacy>
</event:business>
</event:EventDetails>
</event:Event>
我能够使用以下 XSLT 代码成功复制 event:business 以及整个 event:Order 。但它不适合我的用例,因为我实际上只需要在 event:Order 下挑选几个元素,如 common:AddList 和 common:Date。最好的方法是什么?
XSLT:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="http://www.example.com/ns#"
version="1.0">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:template match="event:EventDetails" xmlns:event="blah blah">
<xsl:copy>
<xsl:apply-templates select="event:business" xmlns:event="blah blah"/>
<xsl:apply-templates select="event:Order" xmlns:common="blah blah"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" >
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
预期的 XML 输出:-
<event:Event>
<event:EventDetails>
<event:Order>
<common:Date>2021-01-19T13:15:40.526Z</common:Date>
<common:AddList>
<common:AddData content="blah blah" key="blahblah"/>
<common:AddData content="blah blah" key="blahblah"/>
</common:AddList>
</event:Order>
<event:business>
<common:Legacy>
<common:TA>1</common:TA>
</common:Legacy>
</event:business>
</event:EventDetails>
</event:Event>
【问题讨论】:
-
XML 使用命名空间前缀:event 和 common。您似乎缺少它们的命名空间声明。
标签: xml xslt xpath filter transformation