Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte aus einem XML File die versciedenen Attribute auswählen. Leider kann ich immer nur das erste Attribut auslesen. Es hat weitere Elemente mit demselben Namen und bei diesem Element dann jeweils wieder ein Attribut mit demselben Namen.
Ich habe gesehen, dass man bei XPath mit diesem Zeichen [x] (x steht für ein Zahl), auf den jeweiligen Wert des Attributes zugreifen kann, wie ist dies mit JDOM möglich?
Leider funktioniert er nicht. Es gibt folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: org.jdom.ContentList$FilterList
at FahrplanXML.Saxwer.saxwer(Saxwer.java:134)
at FahrplanXML.italiendetail.italienoberflaeche(italiendetail.java:26)
at FahrplanXML.AuswahlMenu$4.actionPerformed(AuswahlMenu.java:106)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Der Code sieht wie folgt aus:
Code:
package FahrplanXML;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class Saxwer {
//Variablendeklaration
private File inFile;
//Konstruktor
public Saxwer(File in) {
this.inFile = in;
}
//Weitergabe der Variablen durch return vorbereiten
//public String getDtdVersion() {
//System.out.println (scheduleDtdVersion);
//return scheduleDtdVersion;
//}
public void saxwer() throws JDOMException, IOException {
//FileAuswahl filename = new FileAuswahl();
System.out.println(inFile);
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(inFile);
//**************//
/*Elemente holen*/
//**************//
//1.Stufe
//Root Element auslesen
Element schedulemessage = doc.getRootElement();
//2. Stufe
//Childs von Root Element auslesen
Element messageidentification = schedulemessage.getChild("MessageIdentification");
Element messageversion = schedulemessage.getChild("MessageVersion");
Element messagetype = schedulemessage.getChild("MessageType");
Element processtype = schedulemessage.getChild("ProcessType");
Element scheduleclassificationtype = schedulemessage.getChild("ScheduleClassificationType");
Element senderidentification = schedulemessage.getChild("SenderIdentification");
Element senderrole = schedulemessage.getChild("SenderRole");
Element receiveridentification = schedulemessage.getChild("ReceiverIdentification");
Element receiverrole = schedulemessage.getChild("ReceiverRole");
Element messagedatetime = schedulemessage.getChild("MessageDateTime");
Element scheduletimeinterval = schedulemessage.getChild("ScheduleTimeInterval");
Element scheduletimeseries = schedulemessage.getChild("ScheduleTimeSeries");
//3. Stufe
// Childs von scheduletimeseries auslesen
Element senderstimeseriesidentification = scheduletimeseries.getChild("SendersTimeSeriesIdentification");
Element senderstimeseriesversion = scheduletimeseries.getChild("SendersTimeSeriesVersion");
Element businesstype = scheduletimeseries.getChild("BusinessType");
Element product = scheduletimeseries.getChild("Product");
Element objectaggregation = scheduletimeseries.getChild("ObjectAggregation");
Element outarea = scheduletimeseries.getChild("OutArea");
Element outparty = scheduletimeseries.getChild("OutParty");
Element measurementunit = scheduletimeseries.getChild("MeasurementUnit");
Element period = scheduletimeseries.getChild("Period");
//4. Stufe
// Childs von period auslesen
Element timeinterval = period.getChild("TimeInterval");
Element resolution = period.getChild("Resolution");
Element interval = period.getChild("Interval");
//5. Stufe
// Childs von interval auslesen
Element position = interval.getChild("Pos");
Element quantity = interval.getChild("Qty");
//***************//
/*Attribute holen*/
//***************//
//Attribute von Root Element (Stufe 1) auslesen (aus XML)
String scheduleDtdVersion = schedulemessage.getAttributeValue ("DtdVersion");
String scheduleDtdRelease = schedulemessage.getAttributeValue ("DtdRelease");
//Attribute aus Stufe 2 auslesen (aus XML)
String messageidentificationv = messageidentification.getAttributeValue ("v");
String messageversionv = messageversion.getAttributeValue ("v");
String messagetypev = messagetype.getAttributeValue ("v");
String processtypev = processtype.getAttributeValue ("v");
String scheduleclassificationtypev = scheduleclassificationtype.getAttributeValue ("v");
String senderidentificationv = senderidentification.getAttributeValue ("v");
String senderidentificationcodingscheme = senderidentification.getAttributeValue ("codingScheme");
String senderrolev = senderrole.getAttributeValue ("v");
String receiveridentificationv = receiveridentification.getAttributeValue ("v");
String receiveridentificationcodingscheme = receiveridentification.getAttributeValue ("codingScheme");
String receiverrolev = receiverrole.getAttributeValue ("v");
String messagedatetimev = messagedatetime.getAttributeValue ("v");
String scheduletimeintervalv = scheduletimeinterval.getAttributeValue ("v");
//Attribute aus Stufe 3 auslesen (aus XML)
String senderstimeseriesidentificationv = senderstimeseriesidentification.getAttributeValue ("v");
String senderstimeseriesversionv = senderstimeseriesversion.getAttributeValue ("v");
String businesstypev = businesstype.getAttributeValue ("v");
String productv = product.getAttributeValue ("v");
String objectaggregationv = objectaggregation.getAttributeValue ("v");
String outareav = outarea.getAttributeValue ("v");
String outareacodingscheme = outarea.getAttributeValue ("v");
String outpartyv = outparty.getAttributeValue ("v");
String outpartycodingscheme = outparty.getAttributeValue ("v");
String measurementunitv = measurementunit.getAttributeValue ("v");
//Attribute aus Stufe 4 auslesen (aus XML)
String timeintervalv = timeinterval.getAttributeValue ("v");
String resolutionv = resolution.getAttributeValue ("v");
//Attribute aus Stufe 5 auslesen (aus XML)
Iterator i = ((Document) interval.getChildren("Qty")).getDescendants();
while(i.hasNext()) {
Element currentElement = (Element)i.next();
Iterator j = currentElement.getAttributes().iterator();
while(j.hasNext()) {
Attribute currentAttribute = ("v")j.next();
System.out.println("Attribute\t Name: "+currentAttribute.getName()+", Value: "+currentAttribute.getValue());
}
}
String positionv = position.getAttributeValue ("v");
String quantityv = quantity.getAttributeValue ("v");
Detailoberflaeche xmluebergabe = new Detailoberflaeche(scheduleDtdVersion, scheduleDtdRelease, messageidentificationv, messageversionv, messagetypev, processtypev, scheduleclassificationtypev, senderidentificationv, senderidentificationcodingscheme, senderrolev, receiveridentificationv, receiveridentificationcodingscheme, receiverrolev, messagedatetimev, scheduletimeintervalv, senderstimeseriesidentificationv, senderstimeseriesversionv, businesstypev, productv, objectaggregationv, outareav, outareacodingscheme, outpartyv, outpartycodingscheme, measurementunitv, timeintervalv, resolutionv, positionv, quantityv);
xmluebergabe.grundoberflaechen();
}
}
Kann mir dabei jemand helfen. Der Code hat funktioniert, bis ich den Iterator eingefügt habe. Besten Dank für Eure Hilfe...
Danke für Eure Antworten...
Ich habe eure Verbesserungen nun eingebaut. Es gibt nun keinen Fehler mehr, aber funktionieren tuts trotzdem nicht...
Es wird lediglich folgendes ausgegeben.
"Attribute Name: v, Value: 0"
Das Problem ist, er sollte mir ja etwa 96 Werte ausgeben...und zwar 96 Quantity Werte...aber wieso funzt das nicht?
Hier noch einmal der aktuelle code...
Code:
package FahrplanXML;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class Saxwer {
//Variablendeklaration
private File inFile;
//Konstruktor
public Saxwer(File in) {
this.inFile = in;
}
//Weitergabe der Variablen durch return vorbereiten
//public String getDtdVersion() {
//System.out.println (scheduleDtdVersion);
//return scheduleDtdVersion;
//}
public void saxwer() throws JDOMException, IOException {
//FileAuswahl filename = new FileAuswahl();
System.out.println(inFile);
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(inFile);
//**************//
/*Elemente holen*/
//**************//
//1.Stufe
//Root Element auslesen
Element schedulemessage = doc.getRootElement();
//2. Stufe
//Childs von Root Element auslesen
Element messageidentification = schedulemessage.getChild("MessageIdentification");
Element messageversion = schedulemessage.getChild("MessageVersion");
Element messagetype = schedulemessage.getChild("MessageType");
Element processtype = schedulemessage.getChild("ProcessType");
Element scheduleclassificationtype = schedulemessage.getChild("ScheduleClassificationType");
Element senderidentification = schedulemessage.getChild("SenderIdentification");
Element senderrole = schedulemessage.getChild("SenderRole");
Element receiveridentification = schedulemessage.getChild("ReceiverIdentification");
Element receiverrole = schedulemessage.getChild("ReceiverRole");
Element messagedatetime = schedulemessage.getChild("MessageDateTime");
Element scheduletimeinterval = schedulemessage.getChild("ScheduleTimeInterval");
Element scheduletimeseries = schedulemessage.getChild("ScheduleTimeSeries");
//3. Stufe
// Childs von scheduletimeseries auslesen
Element senderstimeseriesidentification = scheduletimeseries.getChild("SendersTimeSeriesIdentification");
Element senderstimeseriesversion = scheduletimeseries.getChild("SendersTimeSeriesVersion");
Element businesstype = scheduletimeseries.getChild("BusinessType");
Element product = scheduletimeseries.getChild("Product");
Element objectaggregation = scheduletimeseries.getChild("ObjectAggregation");
Element outarea = scheduletimeseries.getChild("OutArea");
Element outparty = scheduletimeseries.getChild("OutParty");
Element measurementunit = scheduletimeseries.getChild("MeasurementUnit");
Element period = scheduletimeseries.getChild("Period");
//4. Stufe
// Childs von period auslesen
Element timeinterval = period.getChild("TimeInterval");
Element resolution = period.getChild("Resolution");
Element interval = period.getChild("Interval");
//5. Stufe
// Childs von interval auslesen
Element position = interval.getChild("Pos");
Element quantity = interval.getChild("Qty");
//***************//
/*Attribute holen*/
//***************//
//Attribute von Root Element (Stufe 1) auslesen (aus XML)
String scheduleDtdVersion = schedulemessage.getAttributeValue ("DtdVersion");
String scheduleDtdRelease = schedulemessage.getAttributeValue ("DtdRelease");
//Attribute aus Stufe 2 auslesen (aus XML)
String messageidentificationv = messageidentification.getAttributeValue ("v");
String messageversionv = messageversion.getAttributeValue ("v");
String messagetypev = messagetype.getAttributeValue ("v");
String processtypev = processtype.getAttributeValue ("v");
String scheduleclassificationtypev = scheduleclassificationtype.getAttributeValue ("v");
String senderidentificationv = senderidentification.getAttributeValue ("v");
String senderidentificationcodingscheme = senderidentification.getAttributeValue ("codingScheme");
String senderrolev = senderrole.getAttributeValue ("v");
String receiveridentificationv = receiveridentification.getAttributeValue ("v");
String receiveridentificationcodingscheme = receiveridentification.getAttributeValue ("codingScheme");
String receiverrolev = receiverrole.getAttributeValue ("v");
String messagedatetimev = messagedatetime.getAttributeValue ("v");
String scheduletimeintervalv = scheduletimeinterval.getAttributeValue ("v");
//Attribute aus Stufe 3 auslesen (aus XML)
String senderstimeseriesidentificationv = senderstimeseriesidentification.getAttributeValue ("v");
String senderstimeseriesversionv = senderstimeseriesversion.getAttributeValue ("v");
String businesstypev = businesstype.getAttributeValue ("v");
String productv = product.getAttributeValue ("v");
String objectaggregationv = objectaggregation.getAttributeValue ("v");
String outareav = outarea.getAttributeValue ("v");
String outareacodingscheme = outarea.getAttributeValue ("v");
String outpartyv = outparty.getAttributeValue ("v");
String outpartycodingscheme = outparty.getAttributeValue ("v");
String measurementunitv = measurementunit.getAttributeValue ("v");
//Attribute aus Stufe 4 auslesen (aus XML)
String timeintervalv = timeinterval.getAttributeValue ("v");
String resolutionv = resolution.getAttributeValue ("v");
//Attribute aus Stufe 5 auslesen (aus XML)
Iterator i = interval.getChildren("Qty").iterator();
while(i.hasNext()) {
Element currentElement = (Element)i.next();
Iterator j = currentElement.getAttributes().iterator();
while(j.hasNext()) {
Attribute currentAttribute = (Attribute)j.next();
System.out.println("Attribute\t Name: "+currentAttribute.getName()+", Value: "+currentAttribute.getValue());
}
}
String positionv = position.getAttributeValue ("v");
String quantityv = quantity.getAttributeValue ("v");
Detailoberflaeche xmluebergabe = new Detailoberflaeche(scheduleDtdVersion, scheduleDtdRelease, messageidentificationv, messageversionv, messagetypev, processtypev, scheduleclassificationtypev, senderidentificationv, senderidentificationcodingscheme, senderrolev, receiveridentificationv, receiveridentificationcodingscheme, receiverrolev, messagedatetimev, scheduletimeintervalv, senderstimeseriesidentificationv, senderstimeseriesversionv, businesstypev, productv, objectaggregationv, outareav, outareacodingscheme, outpartyv, outpartycodingscheme, measurementunitv, timeintervalv, resolutionv, positionv, quantityv);
xmluebergabe.grundoberflaechen();
}
}
Du hast aber offensichtlich viele Interval-Elemente. Du musst also eine Ebene höher gehen, über alle Interval-Elemente iterieren und dort dann die entsprechenden Attribute ausgeben.
Ich versteh das nicht, jetzt habe ich das Ganze eine Ebene höher versucht, nun kommt gar keine Ausgabe mehr... Ich versteh dieses Iteratorzeugs anscheinend nicht recht!
Mein Code sieht nun wie folgt aus: (Nur Teilausschnitt)
Der String ist immer derselbe und wiederholt sich einige male. bedeutet dies das er mehrere gleiche Tags gefunden hat? Wie soll ich nun weiter vorgehen, dass ich das Problem lösen kann...
Du solltest Dich zunächst erstmal mit der Funktionsweise des Iterators auseinandersetzen. Entsprechende Kapitel findest Du in einem beliebigen Java-Grundlagenbuch.