java讀XML到實體bean中

需求:

java讀XML文檔到一個實體bean中

給定一個XML文檔,將所有的節點,封裝到一個實體中,然後,傳XML文件名到程序,將該文件的內容讀到實體bean中,返回實體。


xml文檔的內容


<serviceApp id="" lastTime="" serviceAddress='' transfersRuleId='' >
<front id='' frontCode='' frontName=''>
</front>
<node id='' nodeCode='' nodeName=''  nodeIp='' userName='' password='' port='' nodeBaseData='' nodeExample='' dataBaseOwer='' >
</node>
<table id='' tableName=''>
</table>
<targeFront frontCode='' frontName=''>
</targeFront>
<targeNode id='' nodeCode='' nodeName=''  nodeIp='' userName='' password='' port='' nodeBaseData='' nodeExample='' dataBaseOwer=''>
</targeNode>
<targeTable id='' tableName=''>
</targeTable>
<findSql>
select * from table
</findSql>
<transfersRule id='' ruleName=''>
{}
</transfersRule>


</serviceApp>


根據上面的內容,創建一個實體bean(BO形式),值得注意的是XML中有很多節點和屬性,所以實體生成的方式也很多,本人採取的是,根節點Root的所有屬性,以String的形式存儲。 而根節點的其餘子節點全部採用Map<string,string>的形式存儲。這樣做從XML中讀數據的時候,比較方便,直接將其 put 進來就好,後期取值的時候也比較方便,可以直接通過 get(key)完成。

實體bean
import java.util.Map;

public class Appserverbean {

	private Map<String, String> front;			<span style="white-space:pre">	</span>//front節點
	private Map<String, String> node;				//node節點
	private Map<String, String> targeFront;				//targeFront節點
	private Map<String, String> targeNode;				//targenode節點
	private StringBuffer findSql;					//findsql節點
	private String id;						//根節點id屬性
	private String lastTime;					//根節點lasttime屬性
	private String serviceAddress;					//根節點serviceAddress屬性
	private String siteSave;					//根節點siteSave屬性
	private String useState;					//根節點useState屬性
	private String state;						//根節點state屬性
	private String serviceStrategy;					//根節點serviceStrategy屬性
	private String pastTime;					//根節點pastTime屬性
	
	
	
	
	

	public String getSiteSave() {
		return siteSave;
	}

	public void setSiteSave(String siteSave) {
		this.siteSave = siteSave;
	}

	public String getUseState() {
		return useState;
	}

	public void setUseState(String useState) {
		this.useState = useState;
	}

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	public String getServiceStrategy() {
		return serviceStrategy;
	}

	public void setServiceStrategy(String serviceStrategy) {
		this.serviceStrategy = serviceStrategy;
	}

	public String getPastTime() {
		return pastTime;
	}

	public void setPastTime(String pastTime) {
		this.pastTime = pastTime;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getLastTime() {
		return lastTime;
	}

	public void setLastTime(String lastTime) {
		this.lastTime = lastTime;
	}

	public String getServiceAddress() {
		return serviceAddress;
	}

	public void setServiceAddress(String serviceAddress) {
		this.serviceAddress = serviceAddress;
	}

	public Map<String, String> getFront() {
		return front;
	}

	public void setFront(Map<String, String> front) {
		this.front = front;
	}

	public Map<String, String> getNode() {
		return node;
	}

	public void setNode(Map<String, String> node) {
		this.node = node;
	}

	public Map<String, String> getTargeFront() {
		return targeFront;
	}

	public void setTargeFront(Map<String, String> targeFront) {
		this.targeFront = targeFront;
	}

	public Map<String, String> getTargeNode() {
		return targeNode;
	}

	public void setTargeNode(Map<String, String> targeNode) {
		this.targeNode = targeNode;
	}

	public StringBuffer getFindSql() {
		return findSql;
	}

	public void setFindSql(StringBuffer findSql) {
		this.findSql = findSql;
	}
	
	
}

有了實體以後,就可以將XML文件名傳過來。獲取其中數據,並封裝在實體中。


/**
	 * 從xml文件中讀取數據
	 * 返回一個實體bean
	 * Appserverbean 就是先前生成的實體
	 * @return
	 */

	public  Appserverbean readXml(String filemane) {
			
		
			StringBuffer  sql = null;
			Appserverbean bean = new Appserverbean();
			//文件所在文件夾
			//FILED_URL=D:/Coding/Iexchange_spance/iexchange/src/main/java/com/cicro/iexchange/common/XMLFileHandling/
			//從配置文件中 讀取數據, 也可直接給定絕對地址
			
			String fileurl=ConnectFactory.getProperties("FILED_URL");

			try {
				
		// 讀取並解析XML文檔
		// SAXReader就是一個管道,用一個流的方式,把xml文件讀出來
		SAXReader reader = new SAXReader(); // User.hbm.xml表示你要解析的xml文檔
<span style="white-space:pre">		</span>//InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("app.xml");
		//將xml文件讀進來
		Document doc = reader.read(new File(fileurl+filemane));
		// 獲取根節點
		Element rootElt = doc.getRootElement(); 
		Attribute attribute = null;
		//創建map
		 Map<String, String> rootmap = new HashMap<String, String>();
		 //遍歷得到根節點內的屬性,並加到map中
		for ( Iterator i = rootElt.attributeIterator(); i.hasNext(); ) {
	<span style="white-space:pre">		</span> attribute = (Attribute) i.next();
		  <span style="white-space:pre">	</span> rootmap.put(attribute.getName(), attribute.getText());
		}
				/**
				 * 得到根節點的屬性和其對應的值,
				 */
				//得到根節點中的屬性和屬性值
				String id = rootmap.get("id");
				String lastTime = rootmap.get("lastTime");
				String serviceAddress = rootmap.get("serviceAddress");
				String siteSave = rootmap.get("siteSave");					
				String useState = rootmap.get("useState");	
				String state = rootmap.get("state");	
				String serviceStrategy = rootmap.get("serviceStrategy");	
				String pastTime = rootmap.get("pastTime").toString();	
				
				
				
				
				
				//創建一個節點名字集合
				List elementnameli = new ArrayList();
				//得到下面的所有子節點
				for ( Iterator i = rootElt.elementIterator(); i.hasNext(); ) {
				       Element element = (Element) i.next();
				       elementnameli.add(element.getName());
				    }
				//遍歷節點名字集合
				for (int i = 0; i < elementnameli.size(); i++) {
					//得到節點的名字
					String elementname =  (String)elementnameli.get(i);
					//如果名字等於findSql,執行這句
					if("findSql".equalsIgnoreCase(elementname)){
						Element Element = rootElt.element(elementname); 
						String sql1 = Element.getText().toString();
						sql = new StringBuffer(sql1);
						bean.setFindSql(sql);
					}
					if("front".equalsIgnoreCase(elementname)){
						//得到節點對象
						Element frontElement = rootElt.element(elementname); 
						//遍歷節點獲得其中屬性
						Map<String, String> map2 = new HashMap<String, String>();
			for ( Iterator  j = frontElement.attributeIterator(); j.hasNext();) <span style="white-space:pre">						<span style="white-space:pre">		</span>{
					Attribute Element = (Attribute) j.next();
					map2.put(Element.getName(), Element.getText());
					bean.setFront(map2);
						    }
					}
					if("node".equalsIgnoreCase(elementname)){
						//得到節點對象
						Element frontElement = rootElt.element(elementname); 
						//遍歷節點獲得其中屬性
						Map<String, String> map2 = new HashMap<String, String>();
			for ( Iterator  j = frontElement.attributeIterator(); j.hasNext();) <span style="white-space:pre">						<span style="white-space:pre">		</span>{
					Attribute Element = (Attribute) j.next();
					map2.put(Element.getName(), Element.getText());
					bean.setNode(map2);
					}
				}
					if("targeFront".equalsIgnoreCase(elementname)){
						//得到節點對象
						Element frontElement = rootElt.element(elementname); 
						//遍歷節點獲得其中屬性
						Map<String, String> map2 = new HashMap<String, String>();
			for ( Iterator  j = frontElement.attributeIterator(); j.hasNext();) <span style="white-space:pre">						<span style="white-space:pre">		</span>{
					Attribute Element = (Attribute) j.next();
					map2.put(Element.getName(), Element.getText());
					bean.setTargeFront(map2);
				}
			}
					if("targeNode".equalsIgnoreCase(elementname)){
						//得到節點對象
						Element frontElement = rootElt.element(elementname); 
						//遍歷節點獲得其中屬性
						Map<String, String> map2 = new HashMap<String, String>();
			for ( Iterator  j = frontElement.attributeIterator(); j.hasNext();) <span style="white-space:pre">						<span style="white-space:pre">		</span>{<span style="white-space:pre">		</span>
					Attribute Element = (Attribute) j.next();
					map2.put(Element.getName(), Element.getText());
					bean.setTargeNode(map2);
					 }
				}
					
					
				}
				bean.setId(id);
				bean.setLastTime(lastTime);
				bean.setServiceAddress(serviceAddress);
				bean.setSiteSave(siteSave);
				bean.setUseState(useState);
				bean.setState(state);
				bean.setPastTime(pastTime);
				
				System.out.println(bean.getId());
				System.out.println(bean.getLastTime());
				System.out.println(bean.getSiteSave());
				
			} catch (DocumentException e) {
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return bean;
		}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章