將xml格式轉化為list集合


1、需要解析的xml格式文件

<Response>
<MessageHead>
<MessageID>5DF751F7-96AD-D68E-6B72-C9DEEC6182E3</MessageID>
<MessageSender>XmlList</MessageSender>
<MessageResultValue>1</MessageResultValue>
<MessageReusltInfo>服務請求成功!</MessageReusltInfo>
</MessageHead>
<MessageBody>
<MaterialItem>
<MaterialCode>1204-3-2</MaterialCode>
<ItemQty>3</ItemQty>
</MaterialItem>
<MaterialItem>
<MaterialCode>1204-3-1</MaterialCode>
<ItemQty>1</ItemQty>
</MaterialItem>
<HisItem>
<HisCode>CGJY.000297</HisCode>
<MaterialCode>1204-3-2</MaterialCode>
</HisItem>
<HisItem>
<HisCode>CGJY.000388</HisCode>
<MaterialCode>1204-3-1</MaterialCode>
</HisItem>
<HisItem>
<HisCode>CGJY.000295</HisCode>
<MaterialCode>1204-3-2</MaterialCode>
</HisItem>
<HisItem>
<HisCode>CGJY.000226</HisCode>
<MaterialCode>1204-3-2</MaterialCode>
</HisItem>
<HisItem>
<HisCode>CGJY.000227</HisCode>
<MaterialCode>1204-3-2</MaterialCode>
</HisItem>
</MessageBody>
</Response>

 

2、解析xml至list集合的代碼:

 

public class xmlToList {

/**
* 主入口
*
* @param param
* @return
* @throws BizException
*/
public <T extends Base> Base[] exec(String param, Class<T> classInfo)
throws BizException {

// 1、基礎校驗
validation(param);

// 2、解析Xml
Base[] rtns = parseXml(param, classInfo);

return rtns;
}

/**
* 基礎校驗
*
* @param param
* @throws BizException
*/
private void validation(String param) throws BizException {
if (StringUtils.isEmptyWithTrim(param)) {
throw new BizException("Xml轉換為list對象,Xml參數空異常!");
}
}

/**
* 解析Xml
*
* @param xmlStr
* @param classInfo
* @throws BizException
*/
private MaterialItem[] parseXml(String xmlStr, Class<?> classInfo)
throws BizException {

List<String> listAttr = new ArrayList<String>();
// SchInfoDTO dto = initRtn(classInfo, listAttr);

List<MaterialItem> reList = new ArrayList<MaterialItem>();
SAXReader reader = new SAXReader();
try {
//
Document document = reader.read(new ByteArrayInputStream(xmlStr
.getBytes("UTF-8")));
// Document document =
// DocumentHelper.parseText(xmlStr);//獲取document對象
// getRootElement 獲取到該節點的根節點
Element eleRoot = document.getRootElement();
// String bookName = eleRoot.getName();
//判斷根節點是否為空
if (eleRoot != null) {
//獲取到根節點 eleRoot 的iterator對象
Iterator it = eleRoot.elementIterator();
Element schinfo = null;
Element schinfos = null;
Element data = null;
Element hisItem = null;
Element table = null;
// Element element3;

List<String> rootList = new ArrayList<String>();
while (it.hasNext()) {
// System.out.println("=====開始遍歷=====");
Element oneRoot = (Element) it.next();
// 獲取book的屬性名以及 屬性值
List<Attribute> bookAttrs = oneRoot.attributes();

Iterator itt = oneRoot.elementIterator();
while (itt.hasNext()) {// 判斷itt節點中是否有值 有着 就執行 itt.next
Element oneRootChild = (Element) itt.next();
String nodeName = oneRootChild.getName();// 獲取到RequestMaterialResponse節點名稱
String nodeValue = oneRootChild.getStringValue();// 獲取到Response節點中的值
// 獲取到Document對象
Document doc = reader.read(new ByteArrayInputStream(
nodeValue.getBytes("UTF-8")));
Element root = doc.getRootElement();// 獲取到根節點 Response名稱
if (root != null) {
data = root.element("MessageBody");// 獲取到節點MessageBody;
if (data != null) {
schinfos = data.element("MaterialItem");// 獲取到節點MaterialItem;

}
}
}
// System.out.println("=====結束遍歷=====");

@SuppressWarnings("unchecked")
// .elements 表示遍歷這個節點
List<Element> schinfoList = data.elements();// 遍歷根節點
if (schinfoList == null || schinfoList.size() < 1) {
return null;
}

// 循環根節點中每一個節點
for (Element rootelement : schinfoList) {
//獲取到循環的每個節點的名稱
String rootelementName = rootelement.getName();
//判斷 節點的名稱為 MaterialItem 的值 進入
if (rootelementName.equals("MaterialItem")) {

MaterialItem sch = new MaterialItem();

// 獲取到MaterialItem節點下的節點名稱集合
List<Element> rootV = rootelement.elements();
// 獲取到每一個MaterialItem節點下子節點名稱
String rootName = rootelementName;
//獲取到循環到的MaterialItem節點下子節點的值
String rootValue = rootelement.getStringValue();
// 循環遍歷MaterialItem節點下子節點名稱集合

// 獲取到MaterialItemDTO集合中的所有字段名稱
String[] item = sch.getAttrNames();
//循環MaterialItemDTO集合中的字段名稱
for (String i : item) {
//判斷當前循環到的 MaterialItem 節點下的子節點值 並給list集合對應的值 賦值
if (i.equals("materialcode")) {
String st = rootelement.elementText("MaterialCode");
sch.setMaterialCode(st);
}else if(i.equals("itemqty")){
String st = rootelement.elementText("ItemQty");
sch.setItemQty(st);
}
continue;
}
reList.add(sch);
}

}
// hisItem = data.element("HisItem");
List<Element> schinfoLists = data.elements();// 遍歷根節點
if (schinfoLists == null || schinfoLists.size() < 1) {
return null;
}

// 循環根節點中每一個節點
for (Element rootelements : schinfoLists) {

String rootelementHisCodeName = rootelements.getName();
if (rootelementHisCodeName.equals("HisItem")) {
MaterialItemDTO schs = new MaterialItemDTO();

// 獲取到Schinfo節點中的節點集合
List<Element> rootVs = rootelements.elements();
// 獲取到每一個Schinfo節點中的值
String name = rootelements.getName();
String rootValues = rootelements.getStringValue();
// 循環遍歷Schinfo節點集合
//for (Element rootVals : rootVs) {
// 獲取到DTO中的所有字段名稱
String[] items = schs.getAttrNames();
for (String i : items) {
//判斷當前循環到的 MaterialItem 節點下的子節點值 並給list集合對應的值 賦值
if (i.equals("materialcode")) {
String st = rootelements.elementText("MaterialCode");
schs.setMaterialCode(st);
}else if(i.equals("hiscode")){
String st = rootelements.elementText("HisCode");
schs.setHisCode(st);;
}
continue;
}
//}
// 判斷 使用耗材代碼 是否為空 ,為空則不存
if (schs.getMaterialCode() != null
&& schs.getMaterialCode() != "") {
reList.add(schs);
}

}
}


}
}

} catch (Exception e1) {
throw new BizException("解析Xml異常!");
}
return reList.toArray(new MaterialItem[reList.size()]);
}

}

 

 

3、解析完后 list格式數據

[{MaterialCode:(1204-3-2),ItemQty:(3),Status:(0),Dirty:(false)},
{MaterialCode:(1204-3-1),ItemQty:(1),Status:(0),Dirty:(false)},
{HisCode:(CGJY.000297),MaterialCode:(1204-3-2),Status:(0),Dirty:(false)},
{HisCode:(CGJY.000388),MaterialCode:(1204-3-1),Status:(0),Dirty:(false)},
{HisCode:(CGJY.000295),MaterialCode:(1204-3-2),Status:(0),Dirty:(false)},
{HisCode:(CGJY.000226),MaterialCode:(1204-3-2),Status:(0),Dirty:(false)},
{HisCode:(CGJY.000227),MaterialCode:(1204-3-2),Status:(0),Dirty:(false)}]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM