我们说我有两个xml文件。两者都包含一个特定元素(让我们说"名称")但是其中一个元素与另一个xml文件位于不同的位置。
例如:
第一个xml文件:
<root>
<element1>text1</element1>
<element2>
<name value="firstname">John</name>
<element2>
</root>
第二个xml文件:
<root>
<element1>text1</element1>
<name value="firstname">Michael</name>
<element2>text2</element2>
</root>
在不知道自己的位置之前获取这些元素的运行时效率最高的方法是什么?
(很抱歉,如果stackoverflow上已有答案,但我找不到答案)
答案 0 :(得分:2)
您可能想要调查Xpath。请参阅How to read XML using XPath in Java了解您的具体情况,xpath将为“// name”double /表示任何地方都是来自root的当前文档。
答案 1 :(得分:1)
不一定最有效,但更多方便方法是使用 XPath 查询:
File f = new File("path/to/file.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(f);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//name");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
查询:
"//name"
表示:
搜索所有
<name>
代码,无论其深度如何。然后,您可以处理NodeList
。
虽然 XPath 查询涉及一些开销,但是当前的技术在很多情况下都足够了,而且很容易修改查询(如果由于某种原因你必须稍微修改一下查询? )。