DOM解析常用API

常用类及方法

Document(接口)

表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
常用方法
getDocumentElement()
该属性允许直接访问文档的文档元素的子节点。
getElementsByTagName(String tagname)
按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
createElement(String a)
创建指定类型元素

DocumentBuilder

使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document。
常用方法
parse(File f)
将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。

DocumentBuilderFactory

定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
常用方法
newInstence();
获取 DocumentBuilderFactory 的新实例。
newDocumentBuilder()
使用当前配置的参数创建一个新的 DocumentBuilder 实例。

Transformer

此抽象类的实例能够将源树转换为结果树。(修改xml文件后同步用)
可以通过 TransformerFactory.newInstence().newTransformer() 方法获取此类的实例
常用方法
transform(Source xmlSource, Result outputTarget)
将 XML Source 转换为 Result。
eg:newTransformer.transform(new DOMSource(doc), new StreamResult(f));
xmlSource - 要转换的 XML 输入。
outputTarget - 转换 xmlSource 的 Result。

Node

该 Node 接口是整个文档对象模型的主要数据类型。它表示该文档树中的单个节点。
常用方法
appendChild(Node newChild)
将节点 newChild 添加到此节点的子节点列表的末尾。
父节点中新加子节点

import java.beans.XMLDecoder;
import java.io.File;
import java.io.IOException;

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

import org.junit.Test;
import org.w3c.dom.Attr;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class text_1 {
	public static File f = new File("D:/program/demo/src/contacts.xml");
//	public static void main(String[] args) throws Exception {
//		text_1();
//		text_2();   //查找元素节点
//		text_3();   //更改元素的值
//		text_4();   //添加新元素
//		  text_5();   //添加元素属性(id)
//      text_6();   //删除某一个元素
//		text_7();
//	}
	@Test
	public void testa() throws Exception {
		Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
		doc.setXmlVersion("1.0");
		
		Element root = doc.createElement("content");
		Element linkComment = doc.createElement("linklist");
		Element nameComment = doc.createElement("name");
		Element emailComment = doc.createElement("email");
		Element hobbyComment = doc.createElement("hobbay");
	
		nameComment.setTextContent("阿童木");
		emailComment.setTextContent("@阿童木.com");
		hobbyComment.setTextContent("打架");
		
		linkComment.appendChild(nameComment);
		linkComment.appendChild(emailComment);
		linkComment.appendChild(hobbyComment);
		
		root.appendChild(linkComment);
		doc.appendChild(root);
		
		Transformer transformer = TransformerFactory.
				newInstance().newTransformer();
	
		transformer.transform(new DOMSource(doc), new StreamResult( new File("F:/Dom_text.xml")));
	}
	
	@Test
	public static void text_6() throws Exception {
		// TODO Auto-generated method stub
		Document element = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
		Element root = element.getDocumentElement();
		Element linkel = (Element) root.getElementsByTagName("linkman").item(2);
		root.removeChild(linkel);
		Transformer transformer = TransformerFactory.newInstance().newTransformer();
		transformer.transform(new DOMSource(element),
				new StreamResult(f));
		
	}
	@Test
	public static void text_5() throws Exception {
		//获取文档对象
		Document doc = DocumentBuilderFactory.newInstance()
				.newDocumentBuilder().parse(f);
		//获取根元素
		Element element = doc.getDocumentElement();
		//获取到第三个联系人
		Element item = (Element) element
				.getElementsByTagName("linkman").item(2);
		//添加属性
		item.setAttribute("id","3");
		String id = item.getAttribute("id");
		System.out.println(id);
		//同步
		Transformer transformer = TransformerFactory
				.newInstance().newTransformer();
		transformer.transform(new DOMSource(doc),
				new StreamResult(f));
		
	}
	@Test
	public static void text_4() throws Exception {
		// TODO Auto-generated method stub
		//獲取document文件对象
		Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
		//获取到根元素
		Element root = doc.getDocumentElement();
		//创建五个新元素
		Element linkmanElement = doc.createElement("linkman");
		Element nameElement = doc.createElement("name");
		Element emailElement = doc.createElement("email");
		Element addressElement = doc.createElement("address");
		Element groupElement = doc.createElement("group");
		//为新元素创建文本
		nameElement.setTextContent("第三人称");
		emailElement.setTextContent("@qq.com");
		addressElement.setTextContent("榆树");
		groupElement.setTextContent("软件基地");
		//将新元素放到<Linkman>中
		linkmanElement.appendChild(nameElement);
		linkmanElement.appendChild(emailElement);
		linkmanElement.appendChild(addressElement);
		linkmanElement.appendChild(groupElement);
		//将<linkman>添加到根元素中
		root.appendChild(linkmanElement);
		//更新数据
		Transformer newTransformer = TransformerFactory
				.newInstance().newTransformer();
		newTransformer.transform(new DOMSource(doc), new StreamResult(f));
		
	}
	@Test
	public static void text_3() throws Exception {
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		Document doc = builder.parse(f);
		//获取根元素
		Element element = doc.getDocumentElement();
		//获取第二个联系人
		Element m = (Element) element.getElementsByTagName("linkman").item(1);
		//获取第二个联系人的邮箱
		Node item = m.getElementsByTagName("email").item(0);
		//修改第二个联系人的邮箱
		item.setTextContent("184842@z.com");
		//新加一步,同步修改的内容
		Transformer transformer = TransformerFactory.newInstance().newTransformer();
		transformer.transform(new DOMSource(doc),   new StreamResult(f));
		
	}
	@Test
	public static void text_2() throws Exception {
		//获取文档对象
		DocumentBuilder builder = DocumentBuilderFactory.newInstance()
			.newDocumentBuilder();
		Document doc = builder.parse(f);
		//获取根元素
		Element root = doc.getDocumentElement();
		//获取第二个联系人元素
		NodeList linkmans = root.getElementsByTagName("linkman");
		Element linkmanEl = (Element) linkmans.item(1);
		//获取联系人的姓名元素
		NodeList namelist = linkmanEl.getElementsByTagName("name");//从父节点出发,调用Linkmanel
		Node nameel = namelist.item(0);  
		//获取姓名元素中的文本
		String name = nameel.getTextContent();
		System.out.println(name);
	}
	@Test
	public static void text_a() throws Exception {
		// TODO Auto-generated method stub
		DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = fac.newDocumentBuilder();
		Document doc = builder.parse(f);
		System.out.println(doc );
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值