Null-Zeiger-Ausnahme in XMl-Parsing
Muss ich-parser ein Xml-Dokument, und speichern Sie die Werte in Text-Datei, wenn ich mich analysieren normalen Daten (Wenn alle tags sind Daten), dann seine Arbeit in Ordnung, aber wenn jeden tag nicht über Daten verfügen, dann werfen "Null pointerException" was muss ich tun, um zu vermeiden, die null-Zeiger-Ausnahme, bitte schlagen Sie mich mit Beispiel-codes
Beispiel-xml:
<company>
<staff>
<firstname>John</firstname>
<lastname>Kaith</lastname>
<nickname>Jho</nickname>
<Department>Sales Manager</Department>
</staff>
<staff>
<firstname>Sharon</firstname>
<lastname>Eunis</lastname>
<nickname></nickname>
<Department></Department>
</staff>
<staff>
<firstname>Shiny</firstname>
<lastname>mack</lastname>
<nickname></nickname>
<Department>SAP Consulting</Department>
</staff>
</company>
code:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
public class ReadXMLFile {
public static void main(String argv[]) {
try {
File fXmlFile = new File("c:\\file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("staff");
System.out.println("-----------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("First Name : " + getTagValue("firstname", eElement));
System.out.println("Last Name : " + getTagValue("lastname", eElement));
System.out.println("Nick Name : " + getTagValue("nickname", eElement));
System.out.println("Salary : " + getTagValue("Department", eElement));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getTagValue(String sTag, Element eElement) {
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
return nValue.getNodeValue();
}
}
InformationsquelleAutor | 2012-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur überprüfen, dass das Objekt nicht
null
:Ich danke Ihnen so sehr dies für mich gearbeitet
InformationsquelleAutor Jean Logeart
Die obige Zeile ruft die untergeordneten Knoten des Elements mit dem vorgegebenen Tagnamen. Wenn dieses element nicht haben Daten, die zurückgegebenen Knoten-Liste ist leer.
Der obigen Zeile wird das erste element aus der leeren Liste von Knoten. Da die Liste leer ist, 0 ist der index ungültig ist, und wie pro die Dokumentation, wird null zurückgegeben
Die obige Zeile so ruft eine Methode eines null-variable, die bewirkt, dass die NPE.
Sollten Sie testen, ob die Liste leer ist, und zurückgeben, was Sie wollen (eine leere Zeichenfolge, zum Beispiel), wenn es der Fall ist:
InformationsquelleAutor JB Nizet
Ersetzen
durch
dasselbe für die anderen tags.
getTagValue()
.InformationsquelleAutor Sungray
Sollte dieser code funktionieren:
InformationsquelleAutor Massimiliano Giunchi