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"));
	}

}

猜你喜欢

转载自blog.csdn.net/hare_you/article/details/79950608