java Xml 解析 Dom

1 篇文章 0 订阅

xml 文件

employer.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
	<employee>
			<employer email="LiMing@126.com">
				<name>LiMIng</name>
				<sex>M</sex>
				<age>30</age>
			</employer>
			<employer email="Kate55@hotmail.com">
				<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","Java@Sun.com" );
		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();
	}

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值