2011-01-04 6 views
0

Zum Beispiel möchte ich mithilfe von Java mit DOMvon Java-Code generieren XML-Datei

<catalogue> 
    <books> 
     <book id="1"> 
      <name>Gone with the wind</name> 
      <quantity>2</quantity> 
     </book> 
     <book id="2"> 
      <name>Call of the wind</name> 
      <quantity>3</quantity> 
     </book> 
     <book id="3"> 
      <quality>Good</quality> 
      </book> 
    </books> 
    </catalogue> 

die folgenden XML-Datei generiert Es ist nicht sehr schwierig XML-Datei mit nur 1 Knoten mit dem Namen Buch, zu produzieren, aber mit mehr als 1 mit dem gleichen Namen, weiß ich nicht, wie es geht? Ich habe den Fehler:

Doppelten lokalen Variable

Dies ist ein Teil meines Java-Code: Ich versuchte, das erste Buch Element mit dem Code zu erstellen:

Element book = doc.createElement("book"); 
    rootElement.appendChild(book); 

    Element name = doc.createElement("name"); 
    name.appendChild(doc.createTextNode("Gone with the wind")); 
    book.appendChild(name); 

Und dann habe ich den gleichen Code verwendet, um das zweite und das dritte Buch Element zu erstellen, und ich habe den Fehler gefunden. Gibt es einen anderen Weg, es zu tun? Kann mir bitte jemand einen Vorschlag geben? Vielen Dank für Ihre Zeit

+4

Können Sie uns zeigen, den Code zu tun, wo Sie diese Fehlermeldung erhalten? So weit gültiges XML geht, sieht es korrekt aus, also weiß ich nicht, warum Sie diesen Fehler erhalten würden, ohne den Java-Code zu sehen. – JasCav

+0

Eigentlich habe ich nicht viel Erfahrung in Java. Ich habe verwendet: Element book = doc.createElement ("book") um das erste Buchelement zu erstellen und als ich den gleichen Code benutzt habe, um einen anderen Buchknoten zu erzeugen, hat es den Fehler gemacht. Ich dachte an eine Schleife, aber ich weiß nicht, wie ich mit einem Kindknoten umgehen soll.Vielen Dank für die schnelle Antwort – davidBecks

+0

Haben Sie sich die XML-Datei angesehen, um zu sehen, was DOM produziert? Sie sollten in der Lage sein, das DOM im Debugger zu betrachten. –

Antwort

2

Ich vermute, dass Sie das gleiche Objekt zweimal anhängen. Sie müssen createElement jedes Mal aufrufen.

wird diese

nicht funktionieren

Element name = doc.createElement("name"); 
    name.appendChild(doc.createTextNode("Gone with the wind")); 
    book.appendChild(name); 

    name.appendChild(doc.createTextNode("Call of the wind")); 
    book.appendChild(name); 
Sie benötigen

Element name = doc.createElement("name"); 
    name.appendChild(doc.createTextNode("Gone with the wind")); 
    book.appendChild(name); 

    name = doc.createElement("name"); 
    name.appendChild(doc.createTextNode("Call of the wind")); 
    book.appendChild(name); 

Komplettes Beispiel

 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 

    Element root = doc.createElement("catalogue"); 
    doc.appendChild(root); 

    Element books = doc.createElement("books"); 
    root.appendChild(books); 

    Element book1 = doc.createElement("book"); 
    book1.setAttribute("id", "1"); 
    books.appendChild(book1); 

    Element book1_name = doc.createElement("name"); 
    book1_name.setTextContent("Gone with the wind"); 
    book1.appendChild(book1_name); 

    Element book1_quantity = doc.createElement("quantity"); 
    book1_quantity.setTextContent("2"); 
    book1.appendChild(book1_quantity); 

    Element book2 = doc.createElement("book"); 
    book2.setAttribute("id", "2"); 
    books.appendChild(book2); 

    Element book2_name = doc.createElement("name"); 
    book2_name.setTextContent("Call of the wind"); 
    book2.appendChild(book2_name); 

    Element book2_quantity = doc.createElement("quantity"); 
    book2_quantity.setTextContent("3"); 
    book2.appendChild(book2_quantity); 

    Element book3 = doc.createElement("book"); 
    book3.setAttribute("id", "3"); 
    books.appendChild(book3); 

    Element book3_quality = doc.createElement("quality"); 
    book3_quality.setTextContent("Good"); 
    book3.appendChild(book3_quality); 
+0

Danke Andrew, schau auf deinen Code Ich finde mich dumm wirklich. Nochmals vielen Dank – davidBecks

0

Wenn das Problem ist, dann haben Sie mehrere lokale Variablen mit dem gleichen Namen deklariert. In allen Programmiersprachen kann nur eine Variable mit dem gleichen Namen in demselben Bereich Bereich deklariert werden. Ein Bereich wird normalerweise von geschweiften Klammern eingeschlossen. Sie können denselben Variablennamen in derselben Methode verwenden, wenn Sie sie mit zusätzlichen Bereichen einrücken, z. wie das Beispiel unten.

Sie sollten jedoch über die Benennung Ihrer Variablen nachdenken, oder sollten Sie stattdessen Schleifenanweisungen verwenden. Sie könnten auch Ihre Variablen nummerieren, z. name1, name2, name3 usw.

alt text

Wenn Sie wirklich mehrere Variablen mit dem gleichen Namen haben wollen, können Sie sie durch ungenannte Codeblöcke trennen, indem man einfach die geschweiften Klammern wie folgt aus:

Element book = doc.createElement("book"); 
rootElement.appendChild(book); 

{ 
    Element name = doc.createElement("name"); 
    name.appendChild(doc.createTextNode("Gone with the wind")); 
    book.appendChild(name); 
} 
{ 
    Element name = doc.createElement("name"); 
    name.appendChild(doc.createTextNode("Call of the wind")); 
    book.appendChild(name); 
} 
... 

Beide name Variablen leben in separaten Bereichen, so dass sie nicht miteinander interferieren und nicht zu der Compilerfehlermeldung "Doppelte lokale Variablenname" führen.

+0

Vielen Dank Ich denke, es muss nützlich sein – davidBecks