#java #dom #xml-parsing
#java #dom #xml-синтаксический анализ
Вопрос:
У меня следующий формат файла XML, и я должен добавить еще один тег car с номером id, который следует за предыдущим (в данном случае 3):
<vehicles>
<cars>
<car id="1">
<name>ferrari</name>
</car>
<car id="2">
<name>lamborgini</name>
</car>
</cars>
</vehicles>
Я уже нашел решение для добавления другого элемента, и оно выглядит следующим образом:
try {
File inputFile = new File(file);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("car");
Element car= doc.createElement("car");
car.setAttribute("id", "3");
Element node = doc.createElement("name");
node.setTextContent("audi");
car.appendChild(node);
nList.item(0).getParentNode().appendChild(car);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(inputFile);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
Теперь у меня есть три проблемы:
- как добавить новый «car» с правильным идентификатором в конец (не жестко закодированный) с помощью самого простого возможного решения
- форматирование (не так важно): как включить элементы с тем же форматированием, что и существующие (табуляции, пробелы)
- как проверить, существует ли тег «cars» уже
Спасибо!
Ответ №1:
Поскольку у вас уже есть все узлы car в виде списка в nList, просмотрите список из последнего элемента.
Как только вы найдете узел типа Element, остановите его. Получите значение атрибута id для этого узла.
Ваш следующий идентификатор узла будет равен 1 от вашего вновь найденного значения id
Комментарии:
1. Как я могу просмотреть список из последнего элемента?