2011-02-08 77 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

相關問題