#java #xml #xml-parsing
#java #xml #xml-синтаксический анализ
Вопрос:
Например, у меня есть XML-файл:
<parent value="first">
<child>Bill</child>
</parent>
Я хочу получить на выходе: значение = первое, дочернее = Счет
Это означает, что мне нужен атрибут из родительского элемента и значение из дочернего элемента.
Я пытался сделать что-то вроде этого:
List<Str> obj = new ArrayList<Str>();
NodeList nList = doc.getElementsByTagName("parent");
for (int i = 0; i < nList.getLength(); i) {
Element attrElement = (Element) nList.item(i);
NamedNodeMap map = attrElement.getAttributes();
for (int j = 0; j < map.getLength(); j ) {
Node attribute = map.item(j);
Node eNode = nList.item(j);
Element name = (Element) eNode;
obj.add(new Str(attribute.getNodeValue(), name.getElementsByTagName("child").item(0).getTextContent()));
}
}
В результате у меня есть Str со значениями «null».
Ответ №1:
Используйте так
List<String> obj = new ArrayList<String>();
NodeList nList = doc.getElementsByTagName("parent");
for (int i = 0; i < nList.getLength(); i) {
NamedNodeMap map = nList.item(i).getAttributes();
for (int j = 0; j < map.getLength(); j ) {
Node attribute = map.item(j);
Node eNode = nList.item(i); // Use i value here that is the issue.
Element name = (Element) eNode;
obj.add(new String("Value = " attribute.getNodeValue() ",Child="
name.getElementsByTagName("child").item(0).getTextContent()));
}
}
Добавьте один внешний элемент, он отлично работает для нескольких тегов
<xml><parent value=first>
<child>Bill</child></parent> <parent value=second> <child>Steve</child>
</parent></xml>
Комментарии:
1. Спасибо. Но есть проблема. У меня более одного родителя. Атрибут изменяется, но дочернее имя остается как первое. Я хотел, если <родительское значение =»первый»> <дочерний элемент> Билл</дочерний элемент> </ родительский элемент> <родительское значение = «второй»> <дочерний элемент> Стив </ дочерний элемент> </ родительский элемент> И результат, который я получаю: 1) значение = первый, дочерний элемент = Счет 2)значение = второе, дочернее = Счет, но значение = второе, дочернее = Стив должно быть.
2. Я скопировал ваш xml. В обоих случаях я получаю «Дочерний элемент = счет»
3. Пожалуйста, ознакомьтесь с обновленным кодом рядом с «Используйте значение i вместо j, которое является проблемой «.
4. Теперь все работает нормально. Спасибо.