【问题标题】:Parsing and changing nested XMLs in java在 java 中解析和更改嵌套的 XML
【发布时间】:2016-10-19 10:13:30
【问题描述】:

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

现在我有三个问题:

  • 如何使用最简单的解决方案将具有正确 ID 的新“汽车”添加到末尾(非硬编码)
  • 格式化(不那么重要):如何包含与现有元素(制表符、空格)具有相同格式的元素
  • 如何检查“汽车”标签是否已经存在

谢谢!

【问题讨论】:

    标签: java dom xml-parsing


    【解决方案1】:

    由于您已经将所有汽车节点作为列表在 nList 中,因此从最后一项开始遍历列表。

    一旦你找到一个元素类型的节点就停止它。获取该节点的属性 id 值。

    您的下一个节点 id 将是您新找到的 id 值的 +1

    【讨论】:

    • 如何从最后一项开始遍历列表?
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2021-01-25
    相关资源
    最近更新 更多