Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从xslt中的字符串获取节点()_Xslt - Fatal编程技术网

从xslt中的字符串获取节点()

从xslt中的字符串获取节点(),xslt,Xslt,我有一个当前从文件读取的参数: 但现在我需要用一个包含来自外部源的xml的字符串替换它,我得到一个错误 XPTY0019:“/”的第一个操作数的必需项类型为node();提供的值具有项类型xs:string` 不幸的是,我不能使用saxon的exsl:node-set()函数,因为业务原因,我不得不使用不支持它的版本。是否可以通过其他方式从字符串中获取node()?为什么不将字符串转换为XML的过程外部化?创建用于获取外部字符串并转换为XML响应的代理服务。然后,您可以从代理服务请求XML:

我有一个当前从文件读取的参数:

但现在我需要用一个包含来自外部源的xml的字符串替换它,我得到一个错误

XPTY0019:“/”的第一个操作数的必需项类型为node();提供的值具有项类型xs:string`


不幸的是,我不能使用saxon的
exsl:node-set()
函数,因为业务原因,我不得不使用不支持它的版本。是否可以通过其他方式从字符串中获取
node()

为什么不将字符串转换为XML的过程外部化?创建用于获取外部字符串并转换为XML响应的代理服务。然后,您可以从代理服务请求XML:

<xsl:param name="source" select="document('http://localhost/myCustomProxyService?file=filename.xml')"/>

首先,“将字符串转换为节点”的过程通常被称为解析,通过适当的名称调用该过程可能有助于找到正确的解决方案

您处于
xsl:param
中,这意味着您处于XSLT处理器和外部世界之间的边界/接口上,这可能意味着您可以选择在边界的任意一侧进行解析。如果您不能使用XSLT 3.0函数
parse-xml()
或它之前的Saxon扩展函数,那么最好的选择似乎是在调用应用程序中进行解析,并提供结果节点作为参数值


函数的作用是:将“结果树片段”(不是字符串)转换为节点集。我相信,如果提供字符串而不是RTF,它的一些实现将进行解析,但Saxon实现从未如此。多年来,Saxon拥有一个扩展函数Saxon:parse(),其功能非常接近
fn:parse-xml()

“业务原因”是指您使用免费版本(Saxon HE),因为企业不愿意为Saxon PE或EE付费?我了解到,即使Saxon HE版本从9.5或9.6开始,exsl也包含在其中,但业务使用9.3,而且项目已经9年了。升级实际上不可行。
exsl:node-set()
函数不会将字符串转换为节点树。请出示一张照片。好吧,那很不幸。升级Saxon jar将是实现您想要的最简单的方法。另外,在XSLT 3.0中,有一个标准函数
fn:parse-xml()
,但如果它改变了任何东西,则需要9.6或更高版本。我的外部源代码是camel exchange的头。我不确定是否可以将其转储到文件中,然后读入xslt,因为该系统可以在短时间内获得许多消息。另一种选择是,使用参数或变量声明中内联的头中的XML动态生成xslt。改为执行动态生成的XSLT。感谢您的建议。我能够将节点设置为camel交换上的参数。撒克逊人能够正确地使用它。