java Xml 解析 Dom

xml 文件

employer.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<employee>
			<employer email="[email protected]">
				<name>LiMIng</name>
				<sex>M</sex>
				<age>30</age>
			</employer>
			<employer email="[email protected]">
				<name>Kate</name>
				<sex>F</sex>
				<age>28</age>
			</employer>
	</employee>
java 代碼

XmlParser.java

package XmlParser;
/*
 * Date 2014.02.20
 * referrece
 * ahtor:璀若星辰
 */
import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class XmlParser {
	private Document doc;
	private String path;
//讀入一個XML文檔,首先要一個DocumentBuilder對象
	public XmlParser(String path){
		this.path = path;
		//實例化一個文檔構建器工廠
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try{
			 //通過文檔構建器工廠獲取一個文檔構建器
			DocumentBuilder builder = factory.newDocumentBuilder();
			//通過文檔構建器構建一個文檔實例
			this.doc = builder.parse(path);
		}catch(Exception e){
			e.printStackTrace();

		}
	}
	public void parseEx(){
		NodeList n1 = doc.getElementsByTagName("employer");
		System.out.println(n1.getLength());
		for (int i = 0;i < n1.getLength(); i++ ){
			Node n = n1.item(i);
			System.out.println("n="+n);
			//獲取 n 節點下所有的子節點。此處值得注意,在DOM解析時會將所有回車都視爲 n 節點的子節點。
			//排除回車
			if(n instanceof Text){
				continue;
			}
			parseEmployer((Element)n);
		}
	}
	//獲取value 和 text 方法
	public void parseEmployer(Element e){
		String email = e.getAttribute("email");
		System.out.println("email="+email);
		String name = getChildInnerText(e, "name");
		System.out.println("name="+name);
		String age = getChildInnerText(e, "age");
		System.out.println("age="+age);
	}
	//獲取子節點方法
	public Element getChild(Element e,String tagName){
		return (Element) e.getElementsByTagName(tagName).item(0);
	}
	//獲取節點文本內容方法
	public String getChildInnerText(Element e,String childTagName){
		return e.getElementsByTagName(childTagName).item(0).getTextContent();
	}
	//添加節點
	public void addNode(){
		Text text = doc.createTextNode(" ");
		Text newline = doc.createTextNode("\n");
		Element ele = doc.createElement("employer");
		ele.setAttribute("email","[email protected]" );
		ele.setAttribute("password", "123");
	    ele.setTextContent("xml文件");
	    Element ele2 = doc.createElement("name");
	    ele2.setTextContent("BIll");
	    Node n = doc.getElementsByTagName("employee").item(0);
	    n.appendChild(text);
	    n.appendChild(ele);
	    n.appendChild(newline);
	    n.appendChild(ele2);

	    saveXml();
	    System.out.println("save success");
	}
	//同理刪除節點 同添加節點但調用removeChild
	//保存方法
	  private void saveXml() {
		    try {
		      TransformerFactory tFactory =TransformerFactory.newInstance();
		      Transformer transformer = tFactory.newTransformer();
		      DOMSource source = new DOMSource(doc);
		      StreamResult result = new StreamResult(new File(path));
		      transformer.transform(source, result);
		    } catch (Exception e) {
		      e.getStackTrace();
		    }
	  }
	public static void main(String[] args) {
		XmlParser xp = new XmlParser("D:\\pleiades4.2\\pleiades\\eclipse\\workspace\\Test_knowledge\\JavaSource\\XmlParser\\employer.xml");
		xp.parseEx();
		xp.addNode();
	}

}




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