You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XProc中将XPath返回值存入变量?解决Calabash执行报错

解决XProc中使用<p:variable>存储XPath值时的Calabash报错问题

错误原因

你遇到的报错翻译为:无法调用"String.startsWith(String)",因为"lexicalQName"为null。
核心原因是<p:variable>元素缺少必填的name属性——XProc要求每个变量必须有明确的名称,否则处理器无法识别变量标识,进而触发空指针异常。同时原代码还缺少XProc流程必需的根节点<p:declare-step>,且未显式关联变量的数据源上下文。

修正后的代码

input.xml(无需修改)

<root>
 <element id="test"/>
</root>

修正后的test.xpl

<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" version="1.0">
  <!-- 加载源文档并命名,用于后续关联数据源 -->
  <p:load name="load-source-document" href="input.xml"/>
  
  <!-- 定义变量:指定name属性,关联数据源并执行XPath查询 -->
  <p:variable name="target-id" select="/root/element/@id" source="load-source-document"/>
  
  <!-- 可选:输出变量值,验证结果是否正确 -->
  <p:identity>
    <p:input port="source">
      <p:inline>
        <result>
          <id-value>{$target-id}</id-value>
        </result>
      </p:inline>
    </p:input>
  </p:identity>
</p:declare-step>

关键修改说明

  • 给<p:variable>添加name="target-id"属性,明确变量名称,这是解决报错的核心。
  • 通过source="load-source-document"将变量绑定到加载的文档,确保XPath查询有正确的上下文。
  • 补充<p:declare-step>根元素,这是XProc流程的必需结构。
  • 新增<p:identity>步骤用于输出变量值,方便验证结果。

执行验证

用Calabash执行修正后的test.xpl,会输出如下结果,证明变量已正确获取到属性值:

<result>
  <id-value>test</id-value>
</result>

内容的提问来源于stack exchange,提问作者Nicolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:01:06