xml - 使用 document() 函数在 xslt 1.0 中加载外部 xml,但将文档的 url 作为变量传递

标签 xml function xslt external document

问题快速概述:我正在使用 xslt 1.0 转换 xml,其中 xml 是具有 url 的节点。使用 xsl 1.0,我可以获取这些节点值,当我获取这些值时,我需要使用它们从 xslt 加载另一个 xml 文件,如果我通过 document() 函数手动使用这些节点值,它就可以工作,但我需要自动执行。

在 xslt 中加载外部 xml 非常简单:

<xsl:copy-of select="document('URL_OF_XML')/node1/node2"/> 

它按预期工作。

但是如果我的外部 xml 的 url 存储在变量中,例如:

<xsl:variable name="MY_VARIABLE">
    <xsl:value-of select="some_node_containing_url"/>
</xsl:variable> 

<xsl:copy-of select="document('HOW_TO_USE_VARIBALE_VALUE_HERE') />

我已经尝试过:

<xsl:copy-of select="document($MY_VARIABLE)" /> -> works after see UPDATE 2 below

<xsl:copy-of select="document('$MY_VARIABLE')" /> nothing happend

<xsl:copy-of select="document({$MY_VARIABLE})" /> nothing happend, ofc {} are for attributes

<xsl:copy-of select="document('<xsl:value-of select="MY_VARIABLE"/>')" /> we cant use "<" ">" in document function

也许我走错了路,提前提供任何形式的帮助将不胜感激

更新 1 -有效: 使用 concat 并在我的变量中添加一个空字符串,如下所示:

<xsl:copy-of select="document(concat('',$MY_VARIABLE))"/>

更新 2 -有效: 关注@G. Ken Holman 建议我重新声明我的变量:

<xsl:variable name="MY_VARIABLE">
        <xsl:value-of select="some_node_containing_url"/>
</xsl:variable> 

至:

<xsl:variable name="MY_VARIABLE" select="some_node" />

然后调用我的副本:

<xsl:copy-of select="document($MY_VARIABLE)"/>

以及所有作品。感谢您的帮助和建议! 结论:唯一的问题是我的变量声明,现在 document() 函数接受对 $MY_VARIABLE 的所有调用,不需要 concat,但也可以工作,并且 string($MY_VARIABLE) 在重新声明后可以工作。感谢大家抽出时间提供帮助!

最佳答案

我认为你的问题是相对 URI 的基础。当 document() 的参数被计算为字符串时,基本 URI 就是样式表。当 document() 的参数被评估为节点时,基本 URI 是该节点的基本 URI。

您已通过 document() 函数将变量用作字符串来声明该变量:作为结果树片段。

如果您使用 select="some_node" 而不是子 xsl:value-of 声明变量,则会更改文档参数的数据类型( ) 函数,它会更改评估的基本 URI,这可能会更改结果。

否则,您的第一行是正确的:document($variable)

关于xml - 使用 document() 函数在 xslt 1.0 中加载外部 xml,但将文档的 url 作为变量传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18530588/

相关文章:

java - JSON 加载/获取正确但无法显示

java - 使用 Stax 通过 DTD 解析 XML 时出错

c - 参数与 C 中的原型(prototype)不匹配

c++ 读取xml文件的内容

页面加载后的 Jquery .On()

c++ - 从 C++ 函数返回一个字符串

php - xml 错误 xsl 样式表

xml - XSLT 1.0 中用于 Linux CLI/contains() 函数的 XSLT 2.0 处理器

java - XSLT 参数未替换

xml - 无发布管道中的 Azure XML 转换