2011-02-08 11 views
1

厳密に定義された(例えば、書式を変更できない)XML文書を更新する必要があります。私はファイルを読み込んで適切に更新するためにDOMパーサーを使用しています。残念ながら、ドキュメントは何にでもIDを提供するので、私は更新する必要があるノード/要素を見つけるためにgetElementsByTagNameを使用することを余儀なくされています。タグと属性でノードを見つける効率的な方法

私はまだ問題を抱えていませんが、同じように、テキストのセクションに遭遇しています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> 

、私は更新されているに私は必要なtype_def_idを見つけるのNodeListを反復処理する必要があるだろう最善のアプローチではないようです。

Java 1.4を使用している提案はありますか?

+0

XPathは、利用可能なオプションですか?それは確かに最も簡単でしょう。 – biziclop

答えて

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