Auslesen von mehreren XML Dateien - Fehler

paradox3lite

Mitglied
Guten Tag,

Wie im Titel, schreibe ich ein JAVA-Programm welchen innerhalb eines Ordners, alle XML Dateien ausliest und vorgegebene Elemete ausgeben soll. Hier ist der Code

Java:
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class Directory {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		File dir = new File("Z:/Documents and Settings/tgdcaand/Desktop/cdr_storage_mbue88ggn/cdr_storage_mbue88ggn");
		
		String[] children = dir.list();
		if (children == null) {
		    // Either dir does not exist or is not a directory
			System.out.println("Error : Either dir does not exist or is not a directory");
		} else {
		    for (int i=0; i<children.length; i++) {

		        
		        // Code for XML
		        
		        String filename = "Z:/Documents and Settings/tgdcaand/Desktop/cdr_storage_mbue88ggn/cdr_storage_mbue88ggn/" + children[i];
		        
		        System.out.println(filename);
		        
		        File currentXMLfile = new File(filename);
		        		        
				try {
					
					DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			        DocumentBuilder db;
					db = dbf.newDocumentBuilder();
					Document doc = db.parse(currentXMLfile);
			        doc.getDocumentElement().normalize();
			        
			        System.out.println("Root: "
			        		+ doc.getDocumentElement().getNodeName() + "\n");
			        		NodeList nodeLst = doc.getElementsByTagName("PGWRecord");
			        
			        
				} catch (ParserConfigurationException e) {
					e.printStackTrace();
				} catch (SAXException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		        
		        
		    }
		}


	}

}

In der Konsole gibt er dann wie er sollte zu Beispiel:
Z:/Documents and Settings/tgdcaand/Desktop/cdr_storage_mbue88ggn/cdr_storage_mbue88ggn/mbue88ggn_-_0000001126.20110624_-_1001+0200.xml
Root: PGWRecord


JEDOCH erhalte ich bei verschiedenen XML dann diese Meldung:

Z:/Documents and Settings/tgdcaand/Desktop/cdr_storage_mbue88ggn/cdr_storage_mbue88ggn/mbue88ggn_-_0000001130.20110624_-_1121+0200.xml[Fatal Error] mbue88ggn_-_0000001130.20110624_-_1121+0200.xml:77:2: The markup in the document following the root element must be well-formed.
org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at Directory.main(Directory.java:43)



Die XML Dateien sind jedoch alle gleich aufgebaut und ein paar liest er gut aus wie im ersten Beispiel und ein paar fehlerhaft wie im unteren Beispiel.
Hier sind die beiden XML Dateien, damit Ihr sie mal anschauen könnt.
Die die er sauber liest: mbue88ggn_-_0000001126.20110624_-_1001+0200.xml
Die die er fehlerhaft ausgibt: mbue88ggn_-_0000001130.20110624_-_1121+0200.xml


Wisst Ihr warum? und wie kann ich weitermachen, damit ich anderen Elemente der XML Datei ausgeben kann. Ich stehe gerade auf dem Schlauch 🙂 DANKE
 
Sry muss dich enttäuchen der Aufbau der Datei ist nicht gleich.
Deine zweite xml-Datei ist falsch.

Das Rootelement ist da mehrfach vorhanden. Wenn du die Dateigrößen vergleichst erkennt man bereits das da was falsch ist.
Schau erst mal das deine XML-Datei fehlerfrei ist. Am besten im Browser anzeigen lassen und wenn alles angezeigt ist dürfte dein Programm auch kein Fehler mehr bringen
 
Zuletzt bearbeitet:
Ich habe gerade bemerkt das im Browser die fehlerhafte XML nicht angezeigt werden kann...
Die, welche funktioniert, zeigt er sauber an.

Das Rootelement"PGWRecord" ist nur als Test. Ich sollte Elemente wie IP Adresse, ServedIMSI, Bandwith etc.

wie kann ich da vorgehen?
 
ich arbeite immer mit jdom
Du musst dich nun zu den gesuchten childelementen hangeln
Java:
nodeLst.getChildNodes()
Bekommst du eine Nodelist mit den Unterelementen
siehe auch
Referenz: org.w3c.dom.Node
 
Zuletzt bearbeitet:
ich bin leider ziemlich unerfahren.
ich will jetzt als Beispiel inerhalb der XML Datei die <ServedIMSI> ausgeben.

wie würde der Code jetzt lauten? Wäre Dir/Euch dankbar
 
Java:
//NodeList parent = doc.getElementsByTagName("PGWRecord");
NodeList child = doc.getElementsByTagName("servedIMSI");
String wert= child.getNodeValue();

Aber alle Angaben ohne Gewehr;-)
 
Zuletzt bearbeitet:
Java:
db = dbf.newDocumentBuilder();

			Document doc;

			doc = db
					.parse(new File(
							"C:\\Profiles\\Desktop\\mbue88ggn_-_0000001130.20110624_-_1121+0200.xml"));

			NodeList parent = doc.getElementsByTagName("recordType");
			Element kind = (Element) parent.item(0);
			System.out.println(kind.getTextContent());
 

Zurück
Oben