Java:XML之JavaSE Dom解析

XML之JavaSE Dom解析

概述

对于重量级配置文件XML,JavaSE提供了用于解析的API,本章简单讲解如何用Java进行XML文档内容的增删查减。

Java 提供了 Document(文档)、Attribute(属性节点)、Text(文本节点)、Element(元素节点)及Node

优点:能够操作文档树,完成元素的增删查找。

缺点:Dom解析需将整个xml文档读取保存到内存中,针对大件文件性能比较低;

1、获取到文档对象来操作XML文档

	//利用抽象类DocumentBuilderFactory中的静态方法进行实例化
	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

	//调用抽象类DocumentBuilderFactory的实例化对象的方法对抽象类DocumentBuilder进行实例化
	DocumentBuilder builder = factory.newDocumentBuilder();

	//抽象类DocumentBuilder的实例化对象对XML文档进行解析
	Document document = builder.parse(uri);//uri为XML文档路径 String

2、通过文档对象获取元素集合

	//Document实例对象调用 方法getElementsByTagName(String tagname)通过元素名获得元素集合,
	NodeList nodeList = document.getElementsByTagName(tagname);

3、元素集合中的方法
int getLength() 返回该元素的个数
Node item(int index) 输入下标获取元素节点

//遍历元素
	for(int i=0; i<nodeList.length();i++){
		nodeList.item(i);//nodeList.item(i)为一个Node节点
	}

Node节点可调用的方法

short node.getNodeType(); 得到Node类型

String node.getNodeName(); 得到Node名

String node.getNodeValue(); 得到Node值

String getTextContent();得到Node文本内容

4、遍历元素内容

	//遍历元素内容
	for(int i=0; i<nodeList.length();i++){
        //遍历取元素节点内容
		System.out.println(nodeList.item(i).getTextContent());
	}

5、增加元素节点

	//创建元素 tagName为想要创建元素名
	Element createElement = document.createElement(String tagName);
	//创建文本   data为想要创建文本内容
	Text createTextNode = document.createTextNode(String data);
	//将创建的文本内容加入到创建的元素中
	createElement.appendChild(createTextNode);
	//取得元素节点,该节点为增加元素的父节点
	NodeList nodeList = document.getElementsByTagName("p");
	//在指定节点下增加子节点
	nodeList.item(0).appendChild(createElement);

以上完成文档内容的增加,但是目前操作仅为内存中操作,需要将以上操作写入XML文档;

//修改后的Document实例写入XML文档,传入修改后的Document实例
	private static void writeBack(Document document) throws 								TransformerFactoryConfigurationError,
	TransformerConfigurationException, IOException, TransformerException {
        //以下文回写的代码,后面对document增删改后均写入XML  
		TransformerFactory factory = TransformerFactory.newInstance();
		Transformer transformer = factory.newTransformer();
		Source source = new DOMSource(document);
		Result result = new StreamResult(new FileWriter("src/config/student.xml"));
		transformer.transform(source, result);
	}

写好回写的代码后,后面增删改操作可直接调用方法进行回写,写入文件中。

6、删除元素

	//tagName 为需要删除的元素名
	NodeList dest = document.getElementsByTagName(tagName);
    
    //移除元素,通过指定节点调用getParentNode()方法得到父节点,再用父节点的删除方法删除子节点
	//removeChild(Node node)删除子节点
	dest.item(0).getParentNode().removeChild(dest.item(0));
	//回写
	writeBack(document);

7、修改元素内容

	//通过元素名tagName获得需要修改的元素集合
	NodeList elementsByTagName = document.getElementsByTagName(tagName);
	//elementsByTagName.item(0)得到需要修改的指定元素
	//setTextContent(newData);修改元素文本内容
	elementsByTagName.item(0).setTextContent(newData);
	//回写
	writeBack(document);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值