我有一个与此类似的简单 HTML 片段:
<a href="123">link</a>
我需要将其转换为
<abc:href var="123">link</abc:href>
我使用 XSLT 来完成此操作,因此我必须在 xsl:stylesheet
中添加命名空间
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:abc="http://abc.ru">
它几乎可以正常工作,不幸的是,XSLT 转换不断向输出添加 XMLNS,如下所示:
<abc:href var="123" xmlns:abc="http://abc.ru">link</abc:href>
我不需要 xmlns 定义,可以删除它吗?
最佳答案
虽然这确实违背了原则,而且我强烈建议不要这样做,但如果您需要生成这种格式错误的 XML,那么您可以使用类似的指令...
<xsl:value-of disable-output-escaping="yes" select="
concat('<abc:href var="',$href,'">',$link,'</abc:href>')
"/>
...其中 $href 和 $link 是适当表达式的位置标记。
<小时/>更新
为了回应OP的评论,可以使用这样的模板......
<xsl:template match="a">
<xsl:value-of disable-output-escaping="yes" select="
concat('<abc:href var="',@href,'">',.,'</abc:href>')
"/>
</xsl:template>
这个丑陋的解决方案只能作为最后的手段使用。更好的解决方案是使用 XSLT 生成整个文档,而不仅仅是其中的无效片段。这样您的文档就会格式良好,并且您可以发挥 XSLT 的全部功能和简单性。
关于java - XSLT 不向元素添加 XMLNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12177209/