【发布时间】:2014-12-09 01:50:30
【问题描述】:
我是 XSL 的新手,我的任务是生成带有 xmlns:A.B.C 前缀/值作为根节点属性的输出 xml。具体是这样的:
<GetVersionResponse xmlns:A.B.C="www.somesite.co.uk/A/B/C">
<Class>GetVersionRequest</Class>
<Errors>
<Error>
<Text>Some message</Text>
</Error>
</Errors>
</GetVersionResponse>
这是我的输入:
<Error>
<Namespace>xmlns:A.B.C</Namespace>
<NamespaceValue>www.somesite.com/A/B/C</NamespaceValue>
<Class>GetVersionRequest</Class>
<Message>Some message</Message>
</Error>
这是 Error.xsl 文件中重要的 sn-p:
<xsl:template match="Error">
<xsl:variable name="ResponseType">
<xsl:value-of select="concat(substring-before(Class, 'Request'),'Response')"/>
</xsl:variable>
<xsl:variable name="NS">
<xsl:value-of select="Namespace"/>
</xsl:variable>
<xsl:variable name="NSV">
<xsl:value-of select="NamespaceValue"/>
</xsl:variable>
<xsl:element name="{$ResponseType}" namespace="{$NSV}" xml:space="default">
...
</xsl:template
它会生成以下错误,因为我的输入的命名空间元素中有一个冒号:
XSLT 2.0 调试错误:未知的命名空间前缀
如果我用下划线替换冒号,我会得到我需要的确切输出,但当然只能用下划线。像这样:
<GetVersionResponse xmlns_A.B.C="www.somesite.co.uk/A/B/C">
<Class>GetVersionRequest</Class>
<Errors>
<Error>
<Text>Some message</Text>
</Error>
</Errors>
</GetVersionResponse>
我已经在网上搜索了几个小时,并认为我正在尝试将 xmlns: 作为文本插入,而不是使用将生成 xmlns:MYTEXT 但不知道如何操作的正确对象。
非常感谢您的帮助!!!!
【问题讨论】:
-
但是添加一个在文档中任何地方都没有使用的命名空间声明有什么意义呢?
-
这是应我们客户的要求,因此他们使用我们的网络服务的系统在根节点中包含一个标识符,无论他们有什么目的。
-
是的,我知道这是某人的要求——但这不是命名空间声明的用途。 “包含在根节点中的标识符”如果将根节点(以及因此,整个文档)放置在给定的命名空间中,将是有意义的。但在这种情况下,前缀既不必要也没有意义。
标签: xslt namespaces prefix