gpt4 book ai didi

java - 如何防止 Java XSL 转换器插入 namespace 前缀?

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:26 25 4
gpt4 key购买 nike

我正在使用 javax.xml.transform.Transformer 和 1.0 XSL 文档将 XML 转换为 XML。

我正在使用的 XSL 模板之一是

  • 复制整个子元素及其所有子元素
  • 将命名空间声明插入到该子元素的顶级节点
  • 从子元素的标签中删除所有命名空间前缀

这是模板的代码:

  <xsl:variable name="replacementNamespace" select="'abc.123.xyz'" />

<xsl:template match="*" mode="newNamespace">
<xsl:element name="{local-name()}" namespace="{$replacementNamespace}">
<xsl:apply-templates select="@*|node()" mode="newNamespace" />
</xsl:element>
</xsl:template>

这是我需要的:

<type xmlns="abc.123.xyz">
<usr></usr>
etc...
</type>

它创建的输出如下所示:

<ns0:type xmlns:ns0="abc.123.xyz">
<ns1:usr xmlns:ns1="abc.123.xyz"></usr>
etc...
</type>

最佳答案

XSLT 1.0 使处理器可以完全自行决定在输出中使用他们喜欢的任何命名空间前缀。

如果您使用 XSLT 2.0 处理器运行代码,您的代码应该符合您的预期:XSLT 2.0 规范对前缀的选择以及此构造有更多规定

<xsl:element name="{local-name()}" 
namespace="{$replacementNamespace}">

保证您不会获得任何前缀。

所以用 Saxon 再试一次。

关于java - 如何防止 Java XSL 转换器插入 namespace 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51525801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com