2011-02-08 2 views
1

Мне нужно обновить строго определенный (например, не могу изменить формат) XML-документ. Я использую парсер DOM для загрузки файла и обновления там, где это необходимо. К сожалению, документ действительно содержит идентификаторы, поэтому я вынужден использовать 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?

+0

Является ли XPath доступный вариант? Это, безусловно, было бы самым простым. – biziclop

ответ

3

Как предложил @biziclop, XPath был бы эффективным методом с точки зрения времени программиста (а также, вероятно, с точки зрения времени процессора).

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

Я смог использовать xpath, но поскольку в настоящий момент у меня есть требование java 1.4, я использовал jaxen. – Sean

Смежные вопросы