java - XSLT 不向元素添加 XMLNS

标签 java xml xslt

我有一个与此类似的简单 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('&lt;abc:href var="',$href,'"&gt;',$link,'&lt;/abc:href&gt;')
 "/>

...其中 $href 和 $link 是适当表达式的位置标记。

<小时/>

更新

为了回应OP的评论,可以使用这样的模板......

<xsl:template match="a">
  <xsl:value-of disable-output-escaping="yes" select="
    concat('&lt;abc:href var="',@href,'"&gt;',.,'&lt;/abc:href&gt;')
   "/>
</xsl:template>

这个丑陋的解决方案只能作为最后的手段使用。更好的解决方案是使用 XSLT 生成整个文档,而不仅仅是其中的无效片段。这样您的文档就会格式良好,并且您可以发挥 XSLT 的全部功能和简单性。

关于java - XSLT 不向元素添加 XMLNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12177209/

相关文章:

java - 如何从大型 XML 中获取特定元素的值

xml - 使用 JAXB 解析 XML 字符串

xml - 在 Umbraco 中使用 XSLT 从 Xml 中选择前 X 个项目

java - Maven XML 插件 - 如何使用 document() 函数定义 URIResolver 或 SystemID 进行转换?

java - IdentityMapCapacity 在架构注册表中意味着什么

java - 为什么油漆不起作用?

java - 如何获取当前/最后数据(无需初始化)NetBeans?

xml - 具有任意 XML 标记的 SAP 简单转换

xslt - EXSLT 字符串分词器上下文

java - 如何使用 iText 将越南语文本导出为 PDF