问题的快速概述:Iam使用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 -works: 使用concat并将空字符串添加到我的变量,如:
<xsl:copy-of select="document(concat('',$MY_VARIABLE))"/>
更新2 -works: 关注@G。肯霍尔曼建议我重新开始我的变量:
<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的所有调用,不需要连接,但也可以工作,并且字符串($ MY_VARIABLE)在重新声明后工作。感谢大家的帮助!
答案 0 :(得分:2)
我认为您的问题是相对URI的基础。当document()的参数被计算为字符串时,基URI就是样式表。当document()的参数被评估为节点时,基URI是节点的基URI。
你已经通过document()函数将变量用作字符串来声明变量:作为结果树片段。
如果使用select="some_node"
而不是子xsl:value-of
声明变量,则会将参数的数据类型更改为document()函数,这会更改评估的基URI,这可能会改变结果。
否则,您的第一行是正确的:document($variable)