我需要xslt版本2来生成" xml"的域名。属性前缀(xml:lang =" en-us")位于记录或元素级别:
xmlns:xml="http://www.w3.org/XML/1998/namespace"
我尝试使用xsl:namespace和使用xsl:attribute ... namespace =
对我来说都没有用 - 任何建议都会很棒 谢谢大卫
答案 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 namespace(xml:lang
,xml:space
,xml:base
和xml:id
),而无需声明其前缀。
顺便说一句,你可以亲自试试。只需创建一个没有任何名称空间声明的XML文档,并在其中使用xml:lang
作为属性:
<?xml version="1.0" encoding="UTF-8"?>
<root xml:lang="en"/>
没有XML处理器会抱怨它,甚至不是你的XSLT引擎。