我必须更新一个严格定义(例如不能改变格式)的 XML 文档。我正在使用 DOM 解析器加载文件并在适当的位置进行更新。不幸的是,该文档确实为任何内容提供了 ID,所以我不得不使用 getElementsByTagName
来查找我需要更新的节点/元素。
我还没有遇到任何问题,但刚刚遇到了一段文字,例如:
<types>
<type type_def_id="1" type_value="008" />
<type type_def_id="6" type_value="uhl" />
<type type_def_id="9" type_value="xpm" />
<type type_def_id="11" type_value="4100" />
</types>
使用 getElementsByTagName
,我需要遍历 NodeList 以找到我需要更新的 type_def_id,这似乎不是最佳方法。
有使用 Java 1.4 的建议吗?
最佳答案
正如@biziclop 所建议的那样,XPath 在程序员时间(以及可能在 CPU 时间方面)方面将是一种有效的方法。
Here is a primer on using the javax.xml.xpath package在 Java 5 中。
基于上述文章的代码示例为:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("myInput.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//type[type_def_id = '9']");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
// do what you need to do...
}
关于java - 通过标签和属性查找节点的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937513/