2011-02-08 60 views
1

我必须更新严格定义(例如不能更改格式)的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,我需要通过节点列表迭代找到我需要更新type_def_id这似乎并不是最好的方法。

任何使用Java 1.4的建议?

+0

是XPath的一个可行的选择?这肯定是最简单的。 – biziclop 2011-02-08 19:49:26

回答

3

正如@biziclop建议的那样,XPath对于编程人员来说是一个有效的方法(也可能是CPU时间方面)。

在Java 5中

一个代码示例Here is a primer on using the javax.xml.xpath package基于上面的文章是:

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... 
} 
+0

我能够使用xpath,但由于此刻我需要java 1.4,所以我使用了jaxen。 – Sean 2011-02-09 13:32:58