为了账号安全,请及时绑定邮箱和手机立即绑定

如何在具有默认名称空间的xml文档上使用XPath

如何在具有默认名称空间的xml文档上使用XPath

白猪掌柜的 2019-09-27 15:20:13
我想操作具有默认名称空间但没有前缀的xml文档。有没有办法使用没有名称空间uri的xpath,就像没有名称空间一样?我相信,如果将documentBuilderFactory的namespaceAware属性设置为false,那应该是可能的。但就我而言,它不起作用。我的理解是不正确的还是我在代码中做错了?这是我的代码:    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();    domFactory.setNamespaceAware(false);    try {        DocumentBuilder builder = domFactory.newDocumentBuilder();        Document dDoc = builder.parse("E:/test.xml");        XPath xPath = XPathFactory.newInstance().newXPath();        NodeList nl = (NodeList) xPath.evaluate("//author", dDoc, XPathConstants.NODESET);        System.out.println(nl.getLength());    } catch (Exception e) {        e.printStackTrace();    }这是我的xml:<?xml version="1.0" encoding="UTF-8"?><root xmlns="http://www.mydomain.com/schema">  <author>    <book title="t1"/>    <book title="t2"/>  </author></root>
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

Blaise Doughan是正确的,附加的代码是正确的。

问题出在某个地方。我正在Eclipse IDE中通过应用程序启动器运行所有测试,但没有任何效果。然后我发现Eclipse项目引起了所有人的痛苦。我从命令提示符下运行我的课程,它起作用了。创建了一个新的eclipse项目并将相同的代码粘贴到那里,它也在那里工作。谢谢大家的时间和精力。


查看完整回答
反对 回复 2019-09-27
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我已经编写了一个简单的NamespaceContext实现(在此处),可能会有所帮助。它以a Map<String, String>作为输入,其中keya是前缀,并且value是名称空间。


它遵循NamespaceContext spesification,您可以在单元测试中看到它的工作方式。


Map<String, String> mappings = new HashMap<>();

mappings.put("foo", "http://foo");

mappings.put("foo2", "http://foo");

mappings.put("bar", "http://bar");


context = new SimpleNamespaceContext(mappings);


context.getNamespaceURI("foo");    // "http://foo"

context.getPrefix("http://foo");   // "foo" or "foo2"

context.getPrefixes("http://foo"); // ["foo", "foo2"]

请注意,它依赖于Google Guava


查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 442 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信