有没有办法在 XSLT 中设置基本 URI,使其适用于整个文档,就像在 XQuery 中一样?
IE
declare base-uri = "someuri";
无法更改文档的基本 URI。来自XML Base W3C Spec .:
“文档实体或外部实体的基本 URI 由 RFC 3986 规则确定,即基本 URI 是用于检索文档实体或外部实体的 URI。”
文档中任何节点的基本 URI (除了document-node()
)可以使用xml:base
(再次在那里)设置
“属性 xml:base 可以插入 XML 文档中以指定一个基本 URI,而不是文档或外部实体的基本 URI”
来自http://www.w3.org/TR/xslt#document
URI 引用可能是相对的。第二个参数节点集中的节点的基本 URI(参见 [3.2 基本 URI])在文档顺序中排在第一位,用作将相对 URI 解析为绝对 URI 的基本 URI。如果省略第二个参数,则默认为样式表中包含表达式的节点,该表达式包含对文档函数的调用。
来自http://www.w3.org/TR/xslt#base-uri
每个节点还有一个关联的 URI,称为其基本 URI,用于将表示相对 URI 的属性值解析为绝对 URI。如果元素或处理指令出现在外部实体中,则该元素或处理指令的基本 URI 是外部实体的 URI;否则,基本 URI 是文档的基本 URI。文档节点的基本 URI 是文档实体的 URI。文本节点、评论节点、属性节点或命名空间节点的基本 URI 是节点父节点的基本 URI。
所以这:
<xsl:copy-of select="document('external.xml')" xml:base="http://example.org">
应解决为
<xsl:copy-of select="document('http://example.org/external.xml')">
我认为您想要的是xml:base
文档根节点上的属性。
请参阅http://www.w3.org/TR/xmlbase/以确认这将满足您的需求。