问题的快速概述:我正在使用 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
也许我走错了路,任何形式的帮助都将不胜感激,请提前
UPDATE 1 -works:使用 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) 在重新声明后工作。感谢大家的时间帮助!