首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JDom的XPath

使用JDom的XPath
EN

Stack Overflow用户
提问于 2010-07-25 05:14:46
回答 2查看 1.8K关注 0票数 0

在我下面的代码中,我试图使用XPath访问我的'handler‘XML元素,但是我没有运气-- 'elemHandler’元素总是空的。有人能和我分享一下显而易见的解决方案吗?提前谢谢。

代码语言:javascript
复制
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);
    }
}
}
EN

回答 2

Stack Overflow用户

发布于 2010-07-25 05:19:55

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

代码语言:javascript
复制
//handler[2]
票数 1
EN

Stack Overflow用户

发布于 2010-07-25 06:22:39

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

//stp:handler[2]

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

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

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

(//stp:handler)[2]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3326942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档