作为我的要求的一部分,我需要在Datapower工具中路由来自dp:url-open
的响应,对其进行序列化,然后将其发送到另一个链接。
问题是响应在其每个元素中都包含如此多的名称空间。我知道它自动生成的格式,但我需要完全删除它们。
我在互联网上发了几篇帖子并在我的XSLT开始时使用了exclude-result-prefixes
,我能够摆脱大多数与Datapower相关的dp和dpconfig等命名空间,但xsi:
和{{ 1}}仍出现在我的字符串中。如何摆脱那个呢?
请注意,我不能按照几篇帖子中的建议使用其他XSLT。还有其他方法,请建议。
以下是序列化的命名空间。
xmlns:
答案 0 :(得分:2)
此样式表将生成一个没有任何名称空间的XML文档。使用匹配项的local-name()
,使用 xsl:element 和 xsl:attribute 创建所有元素和属性。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="comment() | processing-instruction()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
如果您不希望将它们传播到输出中,则可能需要一些其他模板来定位xsi
架构实例属性。
例如,当您的源XML中包含以下内容时:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="false"
它会生成以下 nil 属性:
nil="false"
您可以通过添加与该特定属性匹配的空模板或xsi
命名空间的任何属性来阻止这种情况:
<xsl:template match="@xsi:*"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />