我正在尋找一些東西來輕鬆創建一個對象來訪問一個大的XML文件。從大XML文件創建JAXB對象
的XML文件是這樣的:
<?xml version="1.0" encoding="WINDOWS-1252"?>
<vzg:vzg erstellt_von="##" erstellt_am="###" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vzg="###" xsi:schemaLocation="###">
<auswahl sicht="B" basisfplp_id="0" basisve_id="0">
<fplp vzg_id="0" periode="2012/2013"/>
<version vzg_id="###" name="###"/>
<strecke name="11801">
<von baukms_nr="###" km="#.#"/>
<bis baukms_nr="###" km="#.#"/>
</strecke>
<bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
<bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
<bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
<bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
<bst vzg_id="#" name="#" kurzbez="##" bez="####" kritart="#"/>
...
我希望對象與一些XML屬性的計算。
喜歡:
列表vzg_id = vzg.auswahl.bst;
int res = vzg_id.get(3)* vzg.auswahl.strecke.von.baukms_nr;
由於XML約有16000行,因此很難爲每個XMLElement創建一個類。
我現在已經完成:
MainClass
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.File;
import javax.xml.bind.JAXB;
public class Main
{
public static void main(String[] args)
{
VZG vzg = JAXB.unmarshal(new File("./XMLVZG.xml"), VZG.class);
System.out.println(vzg.erstellt_am+ " "+vzg.erstellt_von+"\n"+vzg.aw.sicht);
}
}
類VZG
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class VZG
{
@XmlElement(name="auswahl")
AuswahlSicht aw;
@XmlAttribute(name="erstellt_von")
String erstellt_von;
@XmlAttribute(name="erstellt_am")
String erstellt_am;
@XmlAttribute(name="xsi")
String xmlns_xsi;
}
類Auswahl
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="auswahl")
public class AuswahlSicht
{
@XmlAttribute(name="basisfplp_id")
int basisfplp_id;
@XmlAttribute(name="basisve_id")
int basisve_id;
@XmlAttribute(name="sicht")
String sicht;
}
所以我現在能拿到的屬性Root和Cild,但我仍有大約1000個子屬性剩下,我正在尋找一種自動的方式來解析XML以獲取對象。 簡單說明: XML文件
<root>
<child>
<Subchild id="1"/>
<subsubchild id=2/>
<subsubchild id=33/>
</child>
</root>
那麼對象應該是這樣的:
列表subsubchilds = root.child.subchild.subsubchild; int id_one = subsubchilds.get(0);
在此先感謝
請在您的問題中包含您遇到問題的確切說明。 – Perception
作爲@Perception已經提到,你應該問一個問題 - 你的問題是什麼? Btw:從大型XML文檔中創建(基於JAXB的)對象圖在大多數情況下不是一個好主意,因爲您需要大量內存(RAM)。您可能需要考慮流媒體(SAX,StAX)和JAXB的組合。 – home
編輯了這個問題,使其更加清晰;我發佈的代碼工作順利,sorce xml文件格式良好。我對其他解決方案持開放態度,JAXB開始似乎對我起到了很好的作用 – Philipp