我正在使用Oracle SOA Suite 12c,而且我是XSLT的新手。 作为当前项目的一部分,我需要将XML文档中声明的所有命名空间移动到根元素。 我一直试图在XSL中做到这一点,但是没有能够找到正确的结构。
这是我目前的代码:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:template match="@* | node()">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@* , node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:element name="{name(.)}" namespace="{namespace-uri(.)}">
<xsl:copy-of select="descendant::*/namespace::*"/>
<xsl:apply-templates select="@* , node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
让我来自
<a>
<rnxp:b xmlns:rnxp="http://www.oracle.com/XSL/Transform/java/oracle.apps.aia.xml">dadas</rnxp:b>
</a>
到
<?xml version = '1.0' encoding = 'UTF-8'?>
<a>
<rnxp:b>dadas</rnxp:b>
</a>
是我想要的输出
<?xml version = '1.0' encoding = 'UTF-8'?>
<a xmlns:rnxp="http://www.oracle.com/XSL/Transform/java/oracle.apps.aia.xml">
<rnxp:b>dadas</rnxp:b>
</a>
任何人都可以帮我弄清楚如何实现这个目标吗?
EDIT1:
我查看了我正在使用的消息作为输入,并注意到转换不起作用,因为同一个命名空间被多次声明。所以我的目标是&#34;规范化&#34; xml,将所有命名空间在根级别声明一次。