具有默认命名空间问题的Java XPath

时间:2014-06-11 21:05:18

标签: xpath

我无法准备节点表达式

    <ns:Msg xmlns:ns="http://www.noventus.se/epix1" xmlns="http:www.defaultnamespace.com">
       <ns:Header>
          <SubsysId>1</SubsysId>
          <SubsysType>30003</SubsysType>
          <SendDateTime>2009-08-13T14:28:15</SendDateTime>
       </ns:Header>
    </ns:Msg>

我有这种包含两个名称空间的xml 1是ns,另一个是默认名称。 我正在尝试使用org.dom4j.XPath获取SubsysId的值并使用

添加命名空间
    Map namespaces = new HashMap();
    namespaces.put("ns", "http://www.noventus.se/epix1");
    namespaces.put("main", "http:www.defaultnamespace.com");

像这样添加这些名称空间

xpath.setNamespaceContext(new SimpleNamespaceContext(namespaces));

这是我的表达

    String expression = "/ns:Msg/ns:Header/SubsysId";

我尝试了多种选择,但无法获得价值。

注意:如果我删除默认命名空间并运行,那么我将获得该值。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

自定义namespaces.put("main", "http:www.defaultnamespace.com");以来 那么你需要在你的xpath中指定它。

所以你的xpath成为:

String expression = "/ns:Msg/ns:Header/main:SubsysId";