强制xslt生成;xml";域名
我需要xslt版本2在记录或元素级别为“xml”属性前缀(xml:lang=“en-us”)生成域名:强制xslt生成;xml";域名,xml,xslt,attributes,xml-namespaces,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。。。名称空间= 这两种方法对我都不管用——任何建议都会很棒 根据“前缀xml根据定义绑定到名称空间名称http://www.w3.org/XML/1998/namespace。它可以声明,但无需声明,并且不得绑定到任何其他命名
xmlns:xml="http://www.w3.org/XML/1998/namespace"
我尝试同时使用xsl:namespace和xsl:attribute。。。名称空间=
这两种方法对我都不管用——任何建议都会很棒
根据“前缀
xml
根据定义绑定到名称空间名称http://www.w3.org/XML/1998/namespace
。它可以声明,但无需声明,并且不得绑定到任何其他命名空间名称。”因此,虽然您当然可以在文本结果元素上使用该名称空间,或者使用xsl:namespace
输出该名称空间,但我认为不能保证序列化程序将其输出为省略,不会改变XML的语义。正如Martin已经解释的那样,前缀xml:
已与命名空间URIhttp://www.w3.org/XML/1998/namespace
。你可以把它想象成
xmlns:xml="http://www.w3.org/XML/1998/namespace"
但是作为一种隐式声明,它在所有XML文档中都可用,并且被所有符合XML的应用程序识别
因此,您的问题的答案是:您根本不需要声明前缀xml:
,它在默认情况下是可用的。您可以使用(xml:lang
、xml:space
、xml:base
和xml:id
)而不声明其前缀
顺便说一下,你可以自己试试。只需创建一个没有任何名称空间声明的XML文档,并在其中使用XML:lang
作为属性:
<?xml version="1.0" encoding="UTF-8"?>
<root xml:lang="en"/>
没有XML处理者会抱怨它,甚至您的XSLT引擎也不会抱怨。它被称为XML名称空间,而不是域名