强制xslt生成" xml"域名

时间:2015-04-17 14:13:02

标签: xml xslt attributes xml-namespaces

我需要xslt版本2来生成" xml"的域名。属性前缀(xml:lang =" en-us")位于记录或元素级别:

xmlns:xml="http://www.w3.org/XML/1998/namespace"

我尝试使用xsl:namespace和使用xsl:attribute ... namespace =

对我来说都没有用 - 任何建议都会很棒 谢谢大卫

2 个答案:

答案 0 :(得分:3)

根据http://www.w3.org/TR/REC-xml-names/#ns-decl“前缀xml根据定义绑定到命名空间名称http://www.w3.org/XML/1998/namespace。它可以但不必声明,并且不得绑定到任何其他命名空间名称。“因此,虽然您可以在文字结果元素上使用该命名空间或使用xsl:namespace输出它,但我认为不能保证序列化程序输出它,因为省略它不会改变XML的语义。

答案 1 :(得分:2)

正如Martin已经解释的那样,前缀xml:已经与名称空间URI http://www.w3.org/XML/1998/namespace一起声明。您可以将其视为

xmlns:xml="http://www.w3.org/XML/1998/namespace"

但是作为隐式声明,可在所有XML文档中使用,并被所有符合标准的XML应用程序识别。

因此,您的问题的答案是:您根本不需要声明前缀xml:,默认情况下它是可用的。您可以使用attributes in this namespacexml:langxml:spacexml:basexml:id),而无需声明其前缀。

顺便说一句,你可以亲自试试。只需创建一个没有任何名称空间声明的XML文档,并在其中使用xml:lang作为属性:

<?xml version="1.0" encoding="UTF-8"?>
<root xml:lang="en"/>

没有XML处理器会抱怨它,甚至不是你的XSLT引擎。