使用JAXP进行DOM解析

DOM:(document object model)文档对象模型

使用DOM解析器读取xml文件,并在内存中生成DOM树。xml文件中的标签、文本、属性都是树中的节点。子标签解析出的节点、父标签的文本节点和父标签的属性节点均是父标签的节点的孩子。

JAXP开发包

JAXP开发包是J2SE的一部分,它由javax.xml、org.w3c.dom、org.xml.sax包及其子包组成。

使用DOM方式解析XML文件,以下为xml文档内容

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<books>
<book category="科技">
<name>计算机组成原理</name>
<author>james</author>
<price>34</price></book>
<book category="生活">
<name>知音</name>
<author>不详</author>
<price>13</price>
</book>
<book category="军事">
<name>雷达科普</name>
<author>不详</author>
<price>78</price>
</book>
</books>



1、读取XML文件
<pre name="code" class="java"><pre name="code" class="java"><span style="font-size:18px;">import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public static void read() throws ParserConfigurationException, SAXException, IOException {
		//1.得到解析器工厂对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//2.得到解析器对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		//3.使用解析器解析xml文件得到代表整个文档的Document对象
		Document document = builder.parse(new File("src/book.xml"));
		//4.得到指定名字的标签,由于此名字标签有多个,所以需要用NodeList对象保存
		NodeList list = document.getElementsByTagName("price");
		//5.得到此标签的第1个,一定导入org.w3c.dom.Node
		Node node = list.item(0);
		//6.读取此标签的内容
		String price = node.getTextContent();
	}</span>
 
 
 
 2、在XML文件中增加标签 

<span style="font-size:18px;">public void add() throws TransformerException, SAXException, IOException, ParserConfigurationException{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(new File("src/book.xml"));
		//1、创建要增加标签的Element对象,此为父标签book
		Element book = document.createElement("book");
		//子标签name
		Element name = document.createElement("name");
		//设置子标签name的值
		name.setTextContent("高等数学");
		//子标签
		Element author = document.createElement("author");
		author.setTextContent("不详");
		//子标签
		Element price = document.createElement("price");
		price.setTextContent("35");
		//父标签关联子标签
		book.appendChild(name);
		book.appendChild(author);
		book.appendChild(price);
		//添加属性
		book.setAttribute("category", "教育");
		//把父标签book关联到books上
		document.getElementsByTagName("books").item(0).appendChild(book);
		
		//把内存中的Document写入到文件中
		TransformerFactory tff = TransformerFactory.newInstance();
		Transformer tf = tff.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
	}</span>

3、删除指定标签

<span style="font-size:18px;">public void delete() throws Exception{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(new File("src/book.xml"));
		
		//得到要删除标签的父标签
		Node books = document.getElementsByTagName("books").item(0);
		//得到要删除的标签
		Node book = document.getElementsByTagName("book").item(0);
		//删除要删除的标签
		books.removeChild(book);
		
		//写入文件中
		TransformerFactory tff = TransformerFactory.newInstance();
		Transformer tf = tff.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
	}</span>

4、更新标签

<span style="font-size:18px;">public void update() throws Exception{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(new File("src/book.xml"));
		
		Element book = (Element) document.getElementsByTagName("book").item(2);
		book.setAttribute("category", "数学");
		//写入文件中
		TransformerFactory tff = TransformerFactory.newInstance();
		Transformer tf = tff.newTransformer();
		tf.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
	}</span>






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值