如何使用Java中的DOM在XML文档中的同一层次级别添加两个或多个同名元素

时间:2016-01-18 21:43:46

标签: java xml dom

我一直在尝试使用DOM在Java中创建一个XML文档,其中在同一层次级别上有多个同名的汽车元素,类似于以下内容:

<Root>
  <Car>
    <Make>Ford</Make>
    <Model>Fiesta</Model>
  </Car>
  <Car>
    <Make>VW</Make>
    <Model>Golf</Model>
  </Car>
</Root>

但是,在构造XML时,每当我尝试添加另一个Car元素时,它似乎会覆盖已存在的元素,导致我只在输出中获得一个Car元素。

我使用以下代码创建car元素:

Element carElement = doc.createElement("Car");

然后尝试使用以下代码附加到我创建的第一个Car元素:

root.appendChild(carElement);

我也尝试过以下代码无效:

Node existingCar = doc.getElementsByTagName("Car").item(0);
existingCar.getParentNode().insertBefore(carElement, existingCar);

Java文档声明对于appendChild()和insertBefore()方法,如果newChild节点存在,那么它将首先被删除 - 因此我认为我只在我的XML中看到一个输出。

因此,有人可以确认这是否可以与DOM一起使用?如果是这样,他们可以建议或指出我的解决方案吗?感谢

1 个答案:

答案 0 :(得分:0)

我可以确认DOM可以实现这一点!

您没有向我们展示您尝试添加多个具有相同名称的子元素的实际代码,因此我们无法确切地告诉您它为什么不起作用。但是,这段代码可能会为您提供如何修复代码的提示。要添加五个Car元素:

    DocumentBuilder b = ...;

    DOMImplementation impl = b.getDOMImplementation();
    Document d = impl.createDocument(null, "Root", (DocumentType) null);
    Element root = d.getDocumentElement();
    for (int i = 0; i < 5; ++i) {
        Element car = d.createElement("Car");
        // add sub-elements/attributes to car element
        ...
        root.appendChild(car);
    }