gpt4 book ai didi

java - 使用 XSLT 转换在 XML 中创建 xmlns 属性

转载 作者:数据小太阳 更新时间:2023-10-29 02:15:56 25 4
gpt4 key购买 nike

我正在尝试使用 JDK Transformer(Oracle XML v2 Parser 或 JAXP)在 XSLT 转换期间将 xmlns 属性添加到生成的 XML 中,其值由参数传递,但它始终默认为 http://www.w3.org/2000/xmlns/

我的源 XML

<test/>

我的 XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://example.com">
<xsl:param name="myNameSpace" select="'http://neilghosh.com'"/>
<xsl:template match="/">
<process>
<xsl:attribute name="xmlns:neil">
<xsl:value-of select="$myNameSpace"/>
</xsl:attribute>
</process>
</xsl:template>
</xsl:stylesheet>

我的结果

<?xml version="1.0"?>
<process xmlns="http://www.w3.org/2000/xmlns/" xmlns:neil="neilghosh.com">
</process>

我想要的结果

<?xml version="1.0"?>
<process xmlns="http://example.com" xmlns:neil="neilghosh.com">
</process>

最佳答案

首先,在XSLT数据模型中,你不想创建一个属性节点,你想创建一个命名空间节点。

命名空间节点通常是自动创建的:如果您在特定命名空间中创建元素或属性,处理器会自动添加必要的命名空间节点(因此,在序列化时,命名空间声明)。

如果您想创建一个不必要的 namespace 节点(因为它没有用在任何元素或属性的名称中),那么在 XSLT 2.0 中您可以使用 xsl:namespace。如果您坚持使用 XSLT 1.0,那么有一个解决方法,它涉及在相关 namespace 中创建一个元素,然后复制其 namespace 节点:

<xsl:variable name="ns">
<xsl:element name="neil:dummy" namespace="{$param}"/>
</xsl:variable>
<process>
<xsl:copy-of select="$ns/*/namespace::neil"/>
</process>

关于java - 使用 XSLT 转换在 XML 中创建 xmlns 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179258/

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