在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。
答案 0 :(得分:2)
如果它定义了名称空间前缀,它会有什么不同。只要元素由适当的命名空间限定。而且,名称空间前缀使人类更容易阅读xml。因为,OSB创建的XML没有任何问题,不,你无法删除前缀。你应该阅读这个Namespaces in XML 1.1。