2015-06-24 2 views
-1

Скажем, я хочу, чтобы создать этот XML:Каков наилучший подход для создания нескольких элементов xml с тем же именем с Java?

<root> 
    <element> 
     text 1 
    </element> 
    <element> 
     text 2 
    </element> 
    <element> 
     text 3 
    </element> 
     . 
     . 
     . 
    n elements 
</root> 

С петлей Java, я не удается создать его с jdom.element, так как на второй итерации, он говорит, что это уже элемент, называемый «элемент» , и я прочитал, что после присоединения вы не можете создать больше одного и того же элемента, поэтому используйте клон или что-то в этом роде, но я не знаю, как, и я считаю, что это должно быть довольно просто.

int i = 0; 
int n = 100; 
while(i < n){ 
    (Missing code) 
} 

Отсутствующий код - это то, что мне нужно.

EDIT: Извините за то, что я ленив, я добавил код, чтобы лучше показать, что мне нужно делать, и что сработало, но @rolfl понял, что я хотел сделать, и моя проблема, и он решил это. Спасибо. И жаль снова всех за то, что они ленивы.

Мой код:

Element eElements = new org.jdom.Element("Elements"); 
    Element eElement; 
    Element eSubElement1 = new org.jdom.Element("SubElement1"); 
    Element eSubElement2 = new org.jdom.Element("SubElement2"); 

    int i = 0; 
    int n = 100; 

    while (i < n){ 
     eSubElement1.setText("Text " + i); 
     eSubElement2.setText("Text " + i); 
     eElement = new org.jdom.Element("Element"); 
     eElement.addContent(eSubElement1); 
     eElement.addContent(eSubElement2); 
     eElements.addContent(eElement); 
    } 

Я думал, что, называя новый «Element» каждый раз будет достаточно, но вы должны вызвать новый «SubElementX» тоже.

Хотя цикл, который работал:

 while (i < n){ 
     eSubElement1 = new org.jdom.Element("SubElement1").setText("Text " + i); 
     eSubElement2 = new org.jdom.Element("SubElement2").setText("Text " + i); 
     eElement = new org.jdom.Element("Element"); 
     eElement.addContent(eSubElement1); 
     eElement.addContent(eSubElement2); 
     eElements.addContent(eElement); 
    } 
+0

вы должны разместить свой код здесь, мы поможем исправьте свой код. – codeaholicguy

+0

Используя какой API? Вы прочли где? Что это за вопрос? – EJP

ответ

1

Вы явно пытаетесь добавить тот же экземпляр несколько раз, или что-то. Вы должны создать новый экземпляр элемента «Элемент» для каждого значения.

Что-то вроде:.

Element root = new Element("root"); 
for (int i = 0; i < 100; i++) { 
    root.addContent(new Element("element").setText("Text " + i)); 
} 

Затем выведите root элемент с помощью XMLOutputter (Используйте Format.getPrettyFormat() на вашем outputter, чтобы получить хороший пробелы в результатах

+0

Вы правы, это была моя проблема, спасибо. – Lauro182

0

Для обработки XML (сортировочная/демаршаллинг) Я хотел бы предложить JAXB вместо JDOM.

Не знаю вашего конкретного случая использования (я предполагаю, что это может быть больше, чем простой текст, по крайней мере теоретически), я бы использовал POJO, которые представляют собой xml-элемент и другое POJO, которое представляет xml-root и в основном просто содержит список xml-элементов-POJO.

С этим вы должны заполнить xml-root-POJO с помощью xml-element-POJO в вашем цикле while, и после того, как вы закончите, вы передадите xml-root-POJO в JAXB для сортировки его в xml-файл.

В вашем случае POJOs может должны быть аннотированный как @XmlRootElement(name = "root") и @XmlElement(name = "element")