Java DOM getElementByID
Bin ich mit dem DOM-parser in Java hinzufügen Kind-Knoten in den vorhandenen Knoten.
Meine XML ist
<?xml version="1.0" encoding="iso-8859-1"?>
<chart>
<chart renderTo="pieContainer" defaultSeriesType="pie" zoomType="xy" plotBackgroundColor="null" plotBorderWidth="null" plotShadow="false"></chart>
<legend id="legendNode">
<align>center</align>
<backgroundColor>null</backgroundColor>
<borderColor>#909090</borderColor>
<borderRadius>25</borderRadius>
</legend>
</chart>
Gibt es eine Möglichkeit, direkt fügen Sie untergeordnete Knoten unter bestehenden? Kann ich so etwas wie das?
Node myNode = nodesTheme.item(0);
this.widgetDoc.getElementById("/chart/legend").appendChild(myNode);
Mein Code
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class TestGetElementById {
public static void main(String[] args) throws Exception {
String widgetXMLFile = "piechart.xml";
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = domFactory.newDocumentBuilder();
Document doc = docBuilder.parse(widgetXMLFile);
Node n = doc.getElementById("/chart/legend");
//Node n = doc.getElementById("legendTag");
Element newNode = doc.createElement("root");
n.appendChild(newNode);
}
}
Ja man könnte hinzufügen, Knoten, ohne jedes problem. Ist es werfen von Ausnahmen oder problem?
Ja, das werfen von exception Exception in thread "main" java.lang.NullPointerException
Das ist eine Java-Fehlermeldung. Der code, den Sie angegeben haben nicht produzieren diesen Fehler.
Könnten Sie bitte poste deinen code und stack-trace zu verstehen?
Ich habe meinen Code.
Ja, das werfen von exception Exception in thread "main" java.lang.NullPointerException
Das ist eine Java-Fehlermeldung. Der code, den Sie angegeben haben nicht produzieren diesen Fehler.
Könnten Sie bitte poste deinen code und stack-trace zu verstehen?
Ich habe meinen Code.
InformationsquelleAutor Anup Singh | 2012-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
getElementById
ist speziell für das abrufen von DOM-Elementen durch Ihreid
Attribut. Versuchen Sie dies:Andere Möglichkeiten das abrufen von DOM-Knoten, Blick in
querySelector
undquerySelectorAll
.Die Legende Knoten
id
Attribut ist nicht "legendTag". Es ist "legendNode". Hast du es versucht?ja ich habe versucht mit "legendNode"
InformationsquelleAutor Brandan
edit: Zu der ursprünglichen Frage: ja, die appendChild-Sache funktioniert so, wie Sie geplant, liegt das problem innerhalb von getElementById.
Die NullPointerException heißt, es wurde kein Element mit der entsprechenden ID.
Die javadoc gibt es Weg:
http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/Document.html#getElementById(java.lang.String)
und weiter in die Dokumentation von Attr:
http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/Attr.html#isId()
Also grundsätzlich benötigen Sie entweder eine DTD oder ein schema für das Dokument und müssen
oder legen Sie die IsId Eigenschaft von hand.
persönlich ich verwendet: (dirty&scala für lazyness)
Gibt es sicher noch mehr professionelle Möglichkeiten, dies zu tun, nicht mit der Ausarbeitung ein komplettes DTD/schema. Wenn jemand weiß, ich bin neugierig, wie gut.
InformationsquelleAutor tcmon