有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用JDom的javaxpath

在下面的代码中,我试图使用XPath访问我的“handler”XML元素,但我运气不好,“elemHandler”元素总是空的。有谁能和我分享一下显而易见的解决办法吗?提前谢谢

import java.io.IOException;
import java.io.StringReader;

import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;

public class XPathTest {
    private static String jobString = "<job name=\"Workflow.JOB\">" + 
                                           "  <handler name=\"xslt.converter\"/>" +
                                           "  <handler name=\"openoffice.renderer\">" +
                                           "    <opts input=\"ODS\" output=\"PDF\"/>" +
                                           "  </handler>" +
                                           "</job>";

    public static void main(String[] args) {
    try {
        Element elemJobInfo = new SAXBuilder().build(new StringReader(jobString)).detachRootElement();
        XPath handlerExpression = XPath.newInstance("//stp:handler[2]");
        handlerExpression.addNamespace("stp", "http://service.mine.org/dgs");
        Element elemHandler = (Element) handlerExpression.selectSingleNode(elemJobInfo);
        jobString = elemHandler.toString();
    }
    catch (IOException e) {
        System.out.println("Failure: " + e);
    }
    catch (JDOMException e) {
        System.out.println("Failure: " + e);
    }
    catch (Exception e) {
        System.out.println("Failure: " + e);
    }
}
}

共 (2) 个答案

  1. # 1 楼答案

    XPath表达式所针对的XML文档:

    //stp:handler[2]

    已计算,没有默认或声明的命名空间,并且所有节点都位于“无命名空间”中。"http://service.mine.org/dgs"命名空间中没有任何节点。除非在实际情况中使用另一个XML文档,否则上述表达式不能选择任何节点,这正是您得到的结果

    如果您正在使用一个没有显示的文档,而该文档实际上有一个默认名称空间,那么很可能是您在Java代码中错误地拼写了名称空间

    另外,请尝试XPath表达式的这种变体(带或不带名称空间前缀):

    (//stp:handler)[2]

  2. # 2 楼答案

    stp名称空间是怎么回事?jobString中的XML不引用任何名称空间。你试过没有前缀的吗

    //handler[2]