XML学习之--jaxp

使用jaxp查询结点

例如:

xml文件为:

<?xml version="1.0" encoding="UTF-8"?>
<person>
	<p1>
		<name>zhangsan</name>
		<age>20</age>
	</p1>
	<p1>
		<name>lisi</name>
		<age>22</age>
	</p1>
	
</person>

查询name元素的值

步骤:   

  1. 创建解析器工厂。
  2. 根据解析器工厂创建解析器。
  3. 解析xml返回document。
  4. 得到所有name元素。
  5. 返回集合,遍历集合,得到每一个name元素的值(得到具体值用getTextContent())。

添加结点

在第一个<p1>下添加结点<sex>

步骤:

  1. 创建解析器工厂
  2. 根据解析器工厂创建解析器
  3. 解析xml,返回document
  4. 得到第一个p1, 得到所有p1,使用item方法下标得到
  5. 创建sex标签 createElement
  6. 创建文本 createTextNode
  7. 把文本添加到sex下面 appendChild
  8. 把sex添加到第一个p1下面 appendChild
  9. 回写xml

修改结点

 前三步与之前的相同。

从第四步开始

4. 得到sex item方法
5.修改sex里面的值,setTextContent("修改后的值")方法

6.回写xml

删除结点

4.获取sex元素
5.获取sex的父节点  使用getParentNode方法
6.删除使用父节点删除  removeChild方法

7.回写xml

遍历结点

使用递归实现:
1.得到根节点
2.得到根节点子节点
3.得到根节点子节点的子节点


Java代码:

package cn.chaxunjiedian.jaxp;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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;
import org.xml.sax.SAXException;
/**
 * 实现jaxp查询XMl元素值
 * @author Administrator
 *
 */

//有些需要导入的包为w3c中的 
public class JaxpChaxun_JieDian {

	public static void main(String[] args) throws Exception {
//		selectAll();//查询结点
//		addNode();//添加结点
		listElement();//遍历每一个结点
		
	}
	

	private static void listElement() throws Exception {//遍历结点
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析工厂
		DocumentBuilder builder = builderFactory.newDocumentBuilder();//创建解析器
		Document document = builder.parse("E:/eclicpse/javascript/ChaXunJieDian.xml");
		
		list(document);
	}


	private static void list(Node document) {//递归求所有结点
		if(document.getNodeType()==Node.ELEMENT_NODE) {//判断是否为结点类型
			System.out.println(document.getNodeName());
		}
		
		//得到第一层子节点
		NodeList  list1 = document.getChildNodes();
		for(int i=0;i<list1.getLength();i++) {
			Node node1 = list1.item(i);//得到第一层的每一个结点
			list(node1);//递归调用
		}
	}


	private static void selectAll() throws Exception {//查询结点
		/*查询name元素的值
		 * 步骤:   1.创建解析器工厂。
		 * 		2.根据解析器工厂创建解析器。
		 * 		3.解析xml返回document。
		 * 		4.得到所有name元素。
		 * 		5.返回集合,遍历集合,得到每一个name元素的值。
		 */
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析工厂
		DocumentBuilder builder = builderFactory.newDocumentBuilder();//创建解析器
		Document document = builder.parse("E:/eclicpse/javascript/ChaXunJieDian.xml");
		NodeList list = document.getElementsByTagName("name");//得到所有name元素
		for(int i=0;i<list.getLength();i++) {
			Node name1 = list.item(i);//得到每一个name元素
			String str1 = name1.getTextContent();//得到元素的具体的值用getTextContent();
			System.out.println(str1);
			
		}
	}
	
	public static void addNode() throws Exception {//添加结点
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
		Document document = builder.parse("E:/eclicpse/javascript/ChaXunJieDian.xml");
		NodeList list = document.getElementsByTagName("p1");
		Node p1 = list.item(0);//得到元素p1
		Element sex1 = document.createElement("sex");//创建元素sex
		Text text1 =  document.createTextNode("nv");//创建文本
		sex1.appendChild(text1);//将文本添加到sex元素下
		p1.appendChild(sex1);//将sex添加到结点p1上
		//返回文字回写xml,如果不反回将在文本中看不到,只是写在内存中了,以后可直接用
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("E:/eclicpse/javascript/ChaXunJieDian.xml"));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值