不允许将一个以上项目的序列作为fn:substring-after()的第一个参数

时间:2019-12-17 15:26:18

标签: xml xslt xpath

为什么会出现此错误:

  

不允许将多个项目的序列作为fn:substring-after()的第一个参数

$arg1中的substring-after()是否不允许布尔表达式作为参数?

<xsl:variable name="current" 
select="number(replace(substring-after(../wd:Function_Name
                                        [wd:Function_Name/@wd:Descriptor='Choose this' 
                                       or wd:Function_Name/@wd:Descriptor='Over this'
                                        ]
                                         /wd:Function_Name,
                                      '$'
                                      ),
                      ',',
                      ''
                      )
               )"/>

2 个答案:

答案 0 :(得分:0)

您的substring-after()的第一个参数是此XPath,

../wd:Function_Name[wd:Function_Name/@wd:Descriptor='Choose this' 
                 or wd:Function_Name/@wd:Descriptor='Over this']/wd:Function_Name

,它正在选择多个节点。对其进行优化以仅选择一个节点来满足错误消息给出的要求。一种方法可能是选择第一个这样的节点:

(../wd:Function_Name[wd:Function_Name/@wd:Descriptor='Choose this' 
                 or wd:Function_Name/@wd:Descriptor='Over this']/wd:Function_Name)[1]

但其他基于内容的方法也可能有效,具体取决于您的数据。

答案 1 :(得分:0)

您还没有显示数据,即使您显示了数据,我们也不知道您要实现的目标,但是我的随机猜测是您的真正意图是

../wd:Function_Name/wd:Function_Name[@wd:Descriptor=('Choose this','Over this')]