我試圖將任何給定的xml轉換爲哈希映射。我知道這可以以某種方式使用JAXB完成。我正在嘗試使用jsoup。我的代碼是下面將xml轉換爲java hashmap jsoup
public static Map<String,Object> xmlToMapAll(String xml){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<String,Object>();
try{
Document xmlDoc = Jsoup.parse(xml, "", Parser.xmlParser());
Elements eles =xmlDoc.getAllElements();
for(Element ele: eles){
Map<String,Object> mi = new HashMap<String,Object>();
if(ele.children().size()>1){
mi = getChilds(ele.children());
}else{
mi.put(ele.tagName(), ele.ownText());
}
list.add(mi);
//map.putAll(mi);
}
map.put("data", list);
map.put("Status", "SUCCESS");
}catch(Exception ce){
log.error("IndoXMLParseUtil.xmlToMapAll() ce "+IndoUtil.getFullLog(ce));
}
return map;
}
public static Map<String,Object> getChilds(Elements childs){
Map<String,Object> map = new HashMap<String,Object>();
for(Element child: childs){
if(child.children().size()>0){
map = getChilds(child.children());
}else{
map.put(child.tagName(), child.ownText());
}
}
return map;
}
public static void main(String args[]){
String xml="<ExtMessage xmlns=\"com/test/schema/evExtQMainPkgQuotaResp\">
<ExtQMainPkgQuotaResp>
<ServiceNumber>1234567</ServiceNumber>
<Source><a>10</a><b>11</b><a>12</a></Source>
<Status>Success</Status>
<ErrorMessage/><InitialQuota>2621440</InitialQuota>
<UsedQuota>62859.49</UsedQuota>
</ExtQMainPkgQuotaResp> </ExtMessage> ";
Map<String, Object> ds = xmlToMapAll(xml);
System.out.println("IndoXMLParseUtil.main() "+ds);
}
輸出:
{狀態= SUCCESS,數據= [{#根=},{extmessage =},{errormessage的=,B = 11, 狀態=成功,a = 12,initialquota = 2621440,usedquota = 62859.49}, {servicenumber = 6285770355730},{b = 11,a = 12},{a = 10},{b = 11},{a = 12} , {status = Success},{errormessage =},{initialquota = 2621440}, {usedquota = 62859.49}]}
問題是我得到重複的數據。我相信在這裏總會有更好的想法。
不知道檢查已經但這應該幫助http://stackoverflow.com/questions/1537207/how-to-convert-xml-to-java-util-map-and-vice-versa及使用jaxb http://stackoverflow.com/questions/27547292/how-to-parse-xml-to-hashmap –
調查XStream。如果這很容易讓你知道。 – Aadam
K我已經使用了一個X Stream示例與XML中給出的問題。這不能完全解析我的XML。就像我們需要提供根元素和別名等一樣。問題是我的XML在運行時不斷變化。我只需要一些可以直接在java對象中表示XML的東西。我不想更改或修改它。 – Aadam