xml的dom解析(jaxp实现)

xml的解析方式有两种:dom解析,sax解析。

我们来看一下dom是如何解析xml的!

DOM的全名为Document Object Model的缩写。即文档对象模型!dom就相当于一棵树一些样,树枝就是每一个节点:

我们先来看一个xml文件(在escplise下生产xml后转换为source视图操作):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xml-body>
	<book>
		<bookname>math</bookname>
		<bookprice>12</bookprice>
	</book>
	<book>
		<bookname>english</bookname>
		<bookprice>33</bookprice>
	</book>
</xml-body>

那么我们怎么用java来操作呢?其实要用到一个工厂类DocumentBuilderFacotry来产生一个dom解析器!

public static Document createHandle()
	{
		try {
			//首先我们创建工厂!产生dom解析器产生工厂!
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();	
			//从工厂中创建dom解析器!
			DocumentBuilder db = dbf.newDocumentBuilder();
			//接受一个xml文档,并把文档转换为Document对象!
			return db.parse("src/book.xml");		
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

在这之后就可以操作dom的节点以操作xml了!

public static void readXml(Document d)
	{
		//这里的NodeList得到的是一个名为“book”的标签元素的列表
		//也就是里面的元素都是book的node。
		NodeList nl = d.getElementsByTagName("bookname");
		Node n = null;
		for(int i = 0 ;i < nl.getLength(); i++)
		{
			//可以获得该元素的某一个node
			n = nl.item(i);
			//获得node的TextContent!
			System.out.println(n.getFirstChild().getNodeValue());
			//当然我们有一个直接的方法获得TextContent!
			System.out.println(n.getNodeName()+"--"+n.getTextContent());
		}
	}

或者这样

ublic static void readXml_1(Document d)
	{
		//把格式的空格去掉
		d.normalize();	
		NodeList nl = d.getElementsByTagName("bookname");
		//由于得到的是element所以就可以强转
		Element e = (Element) nl.item(0);
		System.out.println(e.getFirstChild().getNodeValue());
	}

我们当然也可以改变xml文件

public static void writeXml(Document d)
	{
		//生成一个element对象
		Element e = (Element) d.createElement("bookauthor");
		//在element中添加内容
		e.setTextContent("jack");
		//得到要添加的节点
		NodeList nl = d.getElementsByTagName("book");
		//添加到得到的节点末端
		nl.item(0).appendChild(e);
		
	}

我们这样只是在内存中改变了所以我们在写入xml'文件

public static void closeXml(Document d)
	{
		try {
			TransformerFactory tff = TransformerFactory.newInstance();
		
			Transformer tf = tff.newTransformer();
			//这里的DOMSource是数据源。而StreamResult是数据的目标地点
			tf.transform(new DOMSource(d),new StreamResult(new File("src/book.xml")));
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

这样就可以用Dom来操作xml了,这是jaxp的方法去处理xml!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值