XSLT1.0向多个匹配添加元素



我是XSLT的新手。我正在尝试将元素添加到从API接收的多个对象中。下面是一个从API收到的示例XML:

<array xmlns="urn:com.sap.b1i.bizprocessor:bizatoms" name="orders">
<object xmlns="urn:com.sap.b1i.bizprocessor:bizatoms">
<bunch of info here 1st order>
</object>
<object xmlns="urn:com.sap.b1i.bizprocessor:bizatoms">
<bunch of info here 2nd order>
</object>
....
</array>

输入是这样的,我需要这样的输出:

<array xmlns="urn:com.sap.b1i.bizprocessor:bizatoms" name="orders">
<object xmlns="urn:com.sap.b1i.bizprocessor:bizatoms">
<Location>USA</Location>
<bunch of info here 1st order>
</object>
<object xmlns="urn:com.sap.b1i.bizprocessor:bizatoms">
<Location>USA</Location>
<bunch of info here 2nd order>
</object>
....
</array>

这意味着我需要在每个bfa:对象中插入一个location元素。

我试过这种方法,但没有成功。

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="bfa:object">
<xsl:copy-of select="."/>
<Location>USA</Location>
</xsl:template>

你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sap="urn:com.sap.b1i.bizprocessor:bizatoms"
version="1.0">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="sap:object">
<xsl:copy>
<xsl:apply-templates/>
<xsl:element name="Locations" namespace="urn:com.sap.b1i.bizprocessor:bizatoms">USA</xsl:element>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

请在此处查看它的工作情况:https://xsltfiddle.liberty-development.net/6pS2B73

相关内容

  • 没有找到相关文章

最新更新