XSL - 如何将所有命名空间移动到root

时间:2017-11-27 19:50:37

标签: xml xslt xslt-2.0 jdeveloper bpel

我正在使用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,将所有命名空间在根级别声明一次。

0 个答案:

没有答案