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;
	}
	
}