Erstellen Sie Objekte aus dem DOM-parser in Java?
Ich versuche zu Parsen einer XML-Datei mittels DOM-parser. Die XML-Datei enthält eine Liste der Flughäfen, die mit Namen, FAA id, "latitude/longitude" und "URL". Hier ist ein fragment davon:
<station>
<station_id>NFNA</station_id>
<state>FJ</state>
<station_name>Nausori</station_name>
<latitude>-18.05</latitude>
<longitude>178.567</longitude>
<html_url>http://weather.noaa.gov/weather/current/NFNA.html</html_url>
<rss_url>http://weather.gov/xml/current_obs/NFNA.rss</rss_url>
<xml_url>http://weather.gov/xml/current_obs/NFNA.xml</xml_url>
</station>
<station>
<station_id>KCEW</station_id>
<state>FL</state>
<station_name>Crestview, Sikes Airport</station_name>
<latitude>30.79</latitude>
<longitude>-86.52</longitude>
<html_url>http://weather.noaa.gov/weather/current/KCEW.html</html_url>
<rss_url>http://weather.gov/xml/current_obs/KCEW.rss</rss_url>
<xml_url>http://weather.gov/xml/current_obs/KCEW.xml</xml_url>
</station>
Ich bin versucht, um Objekte zu erstellen (eine für jeden Flughafen) enthält die Informationen der einzelnen analysierten Flughafen, so dass ich anzeigen kann jedem den Flughafen nur über den Namen. Der rest der Flughafen-Information verwendet werden, die später in das Projekt.
Kann mir jemand sagen wie ich das erstellen und instanziieren von Objekten aus den Angaben dieser DOM-parser, so dass ich die Anzeige nur der name des jeweiligen Flughafens?
Hier ist mein code:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Test {
//initialize variables
String station_id;
String state;
String station_name;
double latitude;
double longitude;
String html_url;
//Here is my constructor, I wish to instantiate these values with
//those of obtained by the DOM parser
Test(){
station_id = this.station_id;
state = this.state;
station_name = this.station_name;
latitude = this.latitude;
longitude = this.longitude;
html_url = this.html_url;
}
//Method for DOM Parser
public void readXML(){
try {
//new xml file and Read
File file1 = new File("src/flwxindex3.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file1);
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("station");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
Element first = (Element) node;
station_id = first.getElementsByTagName("station_id").item(0).getTextContent();
state = first.getElementsByTagName("state").item(0).getTextContent();
station_name = first.getElementsByTagName("station_name").item(0).getTextContent();
latitude = Double.parseDouble(first.getElementsByTagName("latitude").item(0).getTextContent());
longitude = Double.parseDouble(first.getElementsByTagName("longitude").item(0).getTextContent());
html_url = first.getElementsByTagName("station_id").item(0).getTextContent();
}
/*These are just test to see if the actually worked
*
System.out.println(station_id);
System.out.println(state);
System.out.println(station_name);
System.out.println(latitude);
System.out.println(longitude);
System.out.println(html_url);
*/
}
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
}
public static void main(String[] args) {
//Create new object and call the DOM Parser method
Test test1 = new Test();
test1.readXML();
//System.out.println(test1.station_name);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie derzeit haben, Variablen, die global für Ihre Klasse. Sie benötigen eine
Object
enthalten Variablen:Erstellen Sie nun eine
List
Ihre Flughäfen an der Spitze Ihrer KlasseSchließlich erstellen und hinzufügen von Instanzen von Flughafen, um die
List
in der SchleifeUnd eine Schleife über den Flughäfen und den Namen anzeigen, einfach
Um ehrlich zu sein das ist alles ein wenig chaotisch. Ich würde wirklich empfehlen die Verwendung von JAXB, wenn Sie wollen unmarshall Ihre XML-Daten in java-POJOs.
Hier ist schnelles Beispiel mit einem XML-schema, maven-jaxb2-plugin und JAXB.
Mit ein wenig Vorbereitung können Sie Ihre Liste der
Airport
mit nur den folgenden code (Airport
gewordenStation
wie das ist Ihr xml-element-Namen).Ausgabe:
Damit diese Arbeit, die ich erstellt ein xml-schema zum definieren der xml-Datei-format
Das definiert das format der xml-Datei. Hinweis: es wurde ein
stations
- tag umschließt, die Ihre zwei-Bahnhof-tags. Hier ist ein Beispiel-xml -Den ich kompiliert habe, das schema zu einem java-Klasse mit dem folgenden in meine pom.xml - Verwendung von maven. Wenn nicht mit maven können Sie xjc aufrufen von der Kommandozeile aus.
Object
immer ein noargs Konstruktor es sei denn, man ist explizit vorgesehen ist - da braucht man nichts erwarten, die noargs Konstruktor gibt es keine Notwendigkeit zu definieren. Dies ist ein Beispiel für eine ein Java-Bean.Diesem Programm
BeanUtils
zum Auffüllen der Eigenschaften in eine bean anstatt mit setter/getter für jede Eigenschaft.Eine weitere Sache, die fehlt in deiner XML ist
und schließen Sie alle
station
in einem äußerenstations
tag wie unten dargestellt, um Valide XML, sagtHier ist der code
POJO