W3C 使用jaxp对xml文件遍历增删改查小实例

集合:xml元素之增删改查加遍历     使用jaxp

运行结果

 person.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
   <p1>
        <name>zhangsan</name>
        <age>20</age>
        </p1>
   
   <p1>
        <name>xiaoquan</name>
        <age>21</age>
   </p1>
</person>

 

TestJaxp.java

package cn.test.jaxptes;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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;

public class TestJaxp {

	public static void main(String[] args) throws Exception {
		addSex();
		listElement();
		modifySex();
		listElement();
		selectSingle();
		selectAll();
		DelectSex();
		listElement();
	}

	public static Document getDocument() throws Exception {
		/*
		 * 1. 创建解析器工厂 2. 根据解析器工厂创建解析器 3. 解析xml 返回 document
		 */
		// 创建解析器工厂
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory
				.newInstance();
		// 创建解析器
		DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
		// 解析
		Document document = documentBuilder.parse("src/person.xml");
		return document;
	}

	// 遍历结点 把所有元素名打印出来
	public static void listElement() throws Exception {
		/*
		 * 1得到 document ----使用递归来实现----- 2. 得到根节点 3. 得到根节点的子节点 4. 得到根节点的子节点的子节点
		 */
		listIt(getDocument());
		System.out.println();

	}

	private static void listIt(Node node) {
		// 判断为元素类型的时候才打印
		if (node.getNodeType() == Node.ELEMENT_NODE) {
			System.out.print(node.getNodeName() + "   ");
		}
		NodeList list = node.getChildNodes();
		for (int i = 0; i < list.getLength(); i++) {
			Node node1 = list.item(i);
			// 继续得到node1的子节点
			listIt(node1);
		}

	}

	// 删除<sex></sex>节点
	public static void DelectSex() throws Exception {
		/*
		 * 1得到 document 2. 得到sex 3. 获取sex父节点 4. 使用父节点删除 removeChild方法 5. 回写xml
		 */
		// 得到sex元素
		Document document = getDocument();
		Node sex1 = document.getElementsByTagName("sex").item(0);
		// 得到sex1父节点
		Node p1 = sex1.getParentNode();
		// 删除操作
		p1.removeChild(sex1);
		// 回写
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/person.xml"));

	}

	// 修改第一个p1下面的sex内容为nan
	public static void modifySex() throws Exception {
		/*
		 * 1 得到 document 2. 得到sex item方法 3. 修改sex里面的值 setTextContent 方法 4. 回写xml
		 */
		// 得到所有的sex元素
		Document document = getDocument();
		NodeList list = document.getElementsByTagName("sex");
		// 使用下标 得到第一个sex元素
		Node sex1 = list.item(0);
		sex1.setTextContent("nan");
		// 回写
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/person.xml"));

	}

	// 在第一个p1 下面 添加<sex>nv</sex>
	public static void addSex() throws Exception {
		/*
		 * 1得到 document 2. 得到第一个p1 得到所有p1,使用item方法下标得到 3. 创建sex标签 createELement
		 * 创建文本createTextNode 4. 把文本添加到sex下面 appendChild 5. 把sex添加到p1下面 6.
		 * 回写到xml文件里面
		 */
		Document document = getDocument();
		// 得到所有的p1元素
		NodeList list = document.getElementsByTagName("p1");
		// 使用下标 得到第一个p1元素
		Node p1 = list.item(0);
		// 创建sex标签 createELement 创建文本createTextNode
		Element sex1 = document.createElement("sex");
		Text tex1 = document.createTextNode("nv");
		// 把文本添加到sex下面
		sex1.appendChild(tex1);
		// 把sex添加到p1下面
		p1.appendChild(sex1);
		// 回写
		TransformerFactory transformerFactory = TransformerFactory
				.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult(
				"src/person.xml"));
	}

	// 查询xml中 第一个name 元素的值
	public static void selectSingle() throws Exception {
		/*
		 * 1得到 document 2. 获得doucument 下所有的name元素 list 3. 用item方法 下标获取具体的元素 4.
		 * 得到具体的值, 使用getTextContent方法
		 */
		Document document = getDocument();
		// 得到name元素
		NodeList list = document.getElementsByTagName("name");
		// 使用下标 得到第一个元素
		Node name1 = list.item(0);
		// 得到name里面具体的值
		String s1 = name1.getTextContent();
		System.out.println("挑选一个:" + s1);
	}

	// 查询xml内 所有name元素的值
	public static void selectAll() throws Exception {
		/*
		 * 1得到 document 2. 获得doucument 下 所有的name元素 list 3. 遍历 list
		 */
		// 得到name元素
		NodeList list = getDocument().getElementsByTagName("name");
		// 遍历
		System.out.println("遍历所有:");
		for (int i = 0; i < list.getLength(); i++) {
			// 得到name
			Node name1 = list.item(i);
			// 输出 name 里面的值
			String s = name1.getTextContent();
			System.out.println(s);
		}
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值