JAvaでjdomを使用してループネストxmlフォーマットファイルを解析および生成
10531 ワード
xmlとbeanの相互変換.会社では多くのインタフェースの実装はxmlパラメータを要求し,xmlを得て解析して必要な情報を取得し,最後にxmlフォーマットのパラメータを返して検証する.そこで、ここでは、ツリー型構造に基づいて、XMLドキュメントの解析、生成、シーケンス化、および様々な操作を純粋なJAVA技術を用いて実現するオープンソースプロジェクトJDOMを紹介します.JDOMは直接JAVAプログラミングサービスを提供します.より強力なJAVA言語の多くの特性(方法の再ロード、集合概念、マッピング)を利用して、SAXとDOMの機能を効果的に結合しています.
準備作業:解析するxmlファイルを次に示します.
HZD
2016-09-13
ekihheiiu
H8349567
-
2017 09
-
2017 10 01
--
JDOMの具体的な実装をカプセル化したツールクラスXMLUtilが必要であり、JDOMのAPIを直接使用することを避けるための一般的な方法を提供しています.
1.xmlファイルの解析(xmlをbeanに変換)
実装の考え方:1 XMLUtilのツールクラスをインスタンス化します.
②インスタンス化されたツールクラスとXPathによりxmlファイルの各ノード下のデータを得る
③xmlのデータをbeanで保存して使用する
インプリメンテーションコード
package test.xml;
public class HZDXml {
private String reportType;
private String title;
private HZDBody hzdBody;
public String getReportType() {
return reportType;
}
public void setReportType(String reportType) {
this.reportType = reportType;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public HZDBody getHzdBody() {
return hzdBody;
}
public void setHzdBody(HZDBody hzdBody) {
this.hzdBody = hzdBody;
}
}
package test.xml;
import java.util.List;
public class HZDBody {
private String dateTime;
private String name;
private String number;
private String Remark;
private List HZDOrderItem;
public String getDateTime() {
return dateTime;
}
public void setDateTime(String dateTime) {
this.dateTime = dateTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getRemark() {
return Remark;
}
public void setRemark(String remark) {
Remark = remark;
}
public List getHZDOrderItem() {
return HZDOrderItem;
}
public void setHZDOrderItem(List hZDOrderItem) {
HZDOrderItem = hZDOrderItem;
}
}
package test.xml;
import java.util.List;
import test.OrderItemList;
public class HZDOrderItem {
private String typeName;
private List phoneNo;
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public List getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(List phoneNo) {
this.phoneNo = phoneNo;
}
}
package test.xml;
public class PhoneNo {
private String value;
private String name;
private String beginTime;
private String endTime;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBeginTime() {
return beginTime;
}
public void setBeginTime(String beginTime) {
this.beginTime = beginTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public static HZDXml getHZDXMLDataByStr() throws Exception {
String xmlContent =XMLUtil.xml2Str("resources/template/HZD.xml"); // xml
HZDXml HzdXml=null;
XMLUtil xMLUtil = XMLUtil.getInsance(new ByteArrayInputStream(xmlContent
.getBytes("UTF-8"))); // XMLUtil
HzdXml =new HZDXml();
HzdXml.setReportType(xMLUtil.getSingleElementText("Xml/ReportType")); // Xml Xml ReportType
// System.out.println("ReportType: "+HzdXml.getReportType());
HzdXml.setTitle(xMLUtil.getSingleElementText("Xml/Title"));
HZDBody hzdBodyah=new HZDBody();
hzdBodyah.setDateTime(xMLUtil.getSingleElementText("Xml/Body/DateTime"));
hzdBodyah.setName(xMLUtil.getSingleElementText("Xml/Body/Name"));
// System.out.println("Name: "+hzdBodyah.getName());
hzdBodyah.setNumber(xMLUtil.getSingleElementText("Xml/Body/Number"));
// System.out.println("Number: "+hzdBodyah.getNumber());
hzdBodyah.setRemark(xMLUtil.getSingleElementText("Xml/Body/Remark"));
// System.out.println("Remark: "+hzdBodyah.getRemark());
ListHzdOrderItemLists=xMLUtil.getAllElements("Xml/Body/OrderItems/OrderItem");
// xml OrderItems OrderItem
int i=0;
List HzdOrderItemList=new ArrayList();
for(Element element:HzdOrderItemLists){
// OrderItem
HZDOrderItem HzdOrderItem=new HZDOrderItem();
HzdOrderItem.setTypeName(element.getChildTextTrim("TypeName"));
// System.out.println("TypeName :"+HzdOrderItem.getTypeName());
// PhoneNo Item
ListPhoneNoList = element.getChildren("PhoneNo");
String value=PhoneNoList.get(i).getAttributeValue("Value");
List ItemList = element.getChild("PhoneNo").getChildren("Item");
ListphoneNoList=new ArrayList();
for(Element element2 : ItemList){ // Item
PhoneNo phoneNo = new PhoneNo();
phoneNo.setName(element2.getChildTextTrim("Name"));
System.out.println("Name :"+phoneNo.getName());
phoneNo.setBeginTime(element2.getChildTextTrim("BeginTime"));
phoneNo.setEndTime(element2.getChildTextTrim("EndTime"));
phoneNo.setValue(value);
System.out.println("Value :"+phoneNo.getValue());
phoneNoList.add(phoneNo);
}
HzdOrderItem.setPhoneNo(phoneNoList);
HzdOrderItemList.add(HzdOrderItem);
}
hzdBodyah.setHZDOrderItem(HzdOrderItemList);
HzdXml.setHzdBody(hzdBodyah);
return HzdXml;
}
2.生成されたxmlファイル(beanオブジェクトを変換してxmlファイルを生成)
551
1001
1
083356
public String createQueryPrePhotoXML(QueryPrePhotoXML queryPhotoXML) {
String xml = "";
Element XMLData = new Element("XMLData"); //
Element AreaCode = new Element("AreaCode");
AreaCode.setText(queryPhotoXML.getAreaCode());
Element Source = new Element("Source");
Source.setText(queryPhotoXML.getSource());
Element Ext1 = new Element("Ext1");
Ext1.setText(queryPhotoXML.getExt1());
Element Ext2 = new Element("Ext2");
Ext2.setText(queryPhotoXML.getExt2());
Element Ext3 = new Element("Ext3");
Ext3.setText(queryPhotoXML.getExt3());
Element Persons=new Element("Persons");
Element person=new Element("person");
Element PersonType=new Element("PersonType");
PersonType.setText(queryPhotoXML.getPerson().getPersonType());
Element CardID=new Element("CardID");
CardID.setText(queryPhotoXML.getPerson().getCardID());
//
XMLData.addContent(AreaCode);
XMLData.addContent(Source);
person.addContent(PersonType);
person.addContent(CardID);
Persons.addContent(person);
XMLData.addContent(Persons);
XMLData.addContent(Ext1);
XMLData.addContent(Ext2);
XMLData.addContent(Ext3);
Document doc = new Document(XMLData);
XMLOutputter out = new XMLOutputter();
Format format = Format.getCompactFormat();
format.setEncoding("UTF-8");
format.setIndent("\t");
out.setFormat(format);// , UTF-8
ByteArrayOutputStream bo = new ByteArrayOutputStream();
try {
out.output(doc, bo);
logger.info("QueryPrePhoto:"
+ new String(bo.toByteArray(), "UTF-8"));
xml = new String(bo.toByteArray(), "UTF-8");
} catch (Exception e) {
logger.error(e.getMessage());
}
return xml;
}
public class QueryPrePhotoXML {
private String AreaCode;
private String Source;
private String Ext1;
private String Ext2;
private String Ext3;
private Persons person;
public String getAreaCode() {
return AreaCode;
}
public void setAreaCode(String areaCode) {
AreaCode = areaCode;
}
public String getSource() {
return Source;
}
public void setSource(String source) {
Source = source;
}
public String getExt1() {
return Ext1;
}
public void setExt1(String ext1) {
Ext1 = ext1;
}
public String getExt2() {
return Ext2;
}
public void setExt2(String ext2) {
Ext2 = ext2;
}
public String getExt3() {
return Ext3;
}
public void setExt3(String ext3) {
Ext3 = ext3;
}
public Persons getPerson() {
return person;
}
public void setPerson(Persons person) {
this.person = person;
}
}
package com.goldgrid.post.bean;
public class Persons {
private String PersonType;
private String CardID;
public String getPersonType() {
return PersonType;
}
public void setPersonType(String personType) {
PersonType = personType;
}
public String getCardID() {
return CardID;
}
public void setCardID(String cardID) {
CardID = cardID;
}
}