我有这个包含XML作为字符串的XML:
<Result>
<XML>
<PingRS xmlns="http://www.test.com">
<Message>
Hello.
</Message>
</PingRS>
</XML>
</Result>
我正在使用这个XSLT转换它:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="/Result">
<xsl:value-of select="XML" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
要获得此结果:
<PingRS xmlns="http://www.test.com">
<Message>Hello.</Message>
</PingRS>
我想在同一个XSLT文件中删除此xmlns
属性。这可能吗?
答案 0 :(得分:0)
这是可能的,但由于<XML>
元素不包含XML,因此必须通过字符串操作来完成:
<xsl:template match="/Result">
<xsl:variable name="xmlns" select="' xmlns="http://www.test.com"'" />
<xsl:value-of select="substring-before(XML, $xmlns)" disable-output-escaping="yes" />
<xsl:value-of select="substring-after(XML, $xmlns)" disable-output-escaping="yes" />
</xsl:template>
<PingRS xmlns="http://www.test.com">
<Message>
Hello.
</Message>
</PingRS>
修改强>
如果xmlns的内容事先未知,您可以使用:
<xsl:template match="/Result">
<xsl:value-of select="substring-before(XML, ' xmlns="')" disable-output-escaping="yes" />
<xsl:value-of select="substring-after(substring-after(XML, ' xmlns="'), '"')" disable-output-escaping="yes" />
</xsl:template>