在OSB中修改命名空间的XSLT - 命名空间前缀奇怪?

时间:2014-04-10 09:48:34

标签: xml xslt namespaces osb

在Oracle Service Bus 10gR3中运行XSLT转换时,输出XML的显示方式与使用标准XSLT处理器的方式不同。

输入XML:

<given xmlns="http://www.sample.co.uk/version/6">  
  <child>content here</child> 
</given>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="*" >
    <xsl:element name="{local-name()}" namespace="{concat(substring-before(namespace-uri(), '/6'),'/7')}" >
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

输出XML:

<ns1537:given xmlns:ns1537="http://www.sample.co.uk/version/7">
  <ns1538:child xmlns:ns1538="http://www.sample.co.uk/version/7">content here</ns1538:child>
</ns1537:given>

如您所见,每个节点都被分配了不同的增量前缀?而且,命名空间属性包含在每个不同的节点中?我原本期望输出XML如下:

<given xmlns="http://www.sample.co.uk/version/7">
  <child>content here</child> 
</given>

任何人都可以解释为什么OSB的XSLT处理器正在产生如图所示的输出?我能做些什么来获得没有名称空间前缀等的预期输出?

提前致谢, PM。

1 个答案:

答案 0 :(得分:2)

如果它定义了名称空间前缀,它会有什么不同。只要元素由适当的命名空间限定。而且,名称空间前缀使人类更容易阅读xml。因为,OSB创建的XML没有任何问题,不,你无法删除前缀。你应该阅读这个Namespaces in XML 1.1