在java中解析和更改嵌套的XML

时间:2016-10-19 10:13:31

标签: java dom xml-parsing

我有以下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();
    }

现在我有三个问题:

  • 如何添加新的&#34;汽车&#34;使用最简单的解决方案,使用正确的id(不是硬编码)
  • 格式化(不那么重要):如何包含与现有元素具有相同格式的元素(制表符,空格)
  • 如何检查&#34;汽车&#34;标签已存在

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您已将所有车辆节点作为nList中的列表,因此从最后一项遍历列表。

找到Element类型的节点后,将其停止。获取该节点的属性id值。

您的下一个节点ID将是您新发现的ID值的+1