gpt4 book ai didi

java - 通过标签和属性查找节点的有效方法

转载 作者:行者123 更新时间:2023-11-29 06:16:23 25 4
gpt4 key购买 nike

我必须更新一个严格定义(例如不能改变格式)的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com