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

Apache XmlBeans执行XPATH查询抛出java.lang.RuntimeException问题求解

问题根因

  • 命名空间声明语句末尾缺少分号,不符合XMLBeans的XPath语法要求
  • 依赖不匹配:XMLBeans本身不内置XPath执行引擎,你引入的旧版Saxon包版本混乱存在类冲突,无法被XMLBeans识别加载。

解决步骤

1. 修正pom.xml依赖

替换原有依赖配置,删掉之前手动引入的零散旧版Saxon相关依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>net.sf.saxon</groupId>
        <artifactId>Saxon-HE</artifactId>
        <version>10.6</version>
    </dependency>
</dependencies>

2. 清理冲突依赖

删除本地Maven仓库中旧的Saxon缓存文件:删除~/.m2/repository/net/sf/saxon目录,再执行mvn clean install拉取新依赖。

3. 修正Java代码

补充命名空间声明末尾缺失的分号,同时增加空判断避免索引越界:

import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        File file = new File("test.xml");
        try {
            XmlObject xoobj = XmlObject.Factory.parse(file);
            // 命名空间声明末尾必须加分号
            String declareNameSpaces = "declare namespace v='urn:schemas-microsoft-com:vml'; ";
            String xpathFilter = "//v:shape[contains(@id,'PowerPlusWaterMarkObject')]/v:textpath/@string";

            XmlObject[] arr = xoobj.selectPath(declareNameSpaces + xpathFilter);
            if (arr.length > 0) {
                String watermark = arr[0].newCursor().getTextValue();
                System.out.println(watermark);
            }
        } catch (XmlException | IOException ex) {
            ex.printStackTrace();
        }
    }
}

修改完成后运行即可正常输出CONFIDENTIAL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:15:06