xml_使用jaxp进行dom解析_增删改查(实例)

1.查询节点

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Select {
	public static void main(String[] args) throws Exception {
		// 创建解析器工厂
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

		// 创建解析器
		DocumentBuilder builder = builderFactory.newDocumentBuilder();

		// 获取目标源文件
		Document document = builder.parse("src\\person.xml");

		// 得到name标签的集合
		NodeList list = document.getElementsByTagName("name");

		for (int i = 0; i < list.getLength(); i++) {
			// 具体标签对象
			Node name = list.item(i);

			// 标签内的值
			System.out.println(name.getTextContent());
		}
	}
}

2.增加节点操作

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.Text;

public class Add {
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

		// 创建解析器
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
		Document document = builder.parse("src\\person.xml");
		// 添加节点
		Element p4 = document.createElement("p4");
		Element name = document.createElement("name");
		Text nameText = document.createTextNode("马云");
		Element age = document.createElement("age");
		Text ageText = document.createTextNode("30");

		name.appendChild(nameText);
		age.appendChild(ageText);

		p4.appendChild(name);
		p4.appendChild(age);

		Node p = document.getElementsByTagName("person").item(0);
		p.appendChild(p4);

		// 我们的实际操作是在内存中实现的,为了让xml文件进行改变,使用以下回写方法
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("src\\person.xml"));
	}
}

3.删除节点操作

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.Node;
import org.w3c.dom.NodeList;

public class Delete {
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory dBuilderFactory = DocumentBuilderFactory.newInstance();
		
		DocumentBuilder documentBuilder = dBuilderFactory.newDocumentBuilder();
		
		Document document = documentBuilder.parse("src//person.xml");
		
		NodeList listPer = document.getElementsByTagName("person");
	
		Node nodePer = listPer.item(0);
		
		//获取p4节点
		Node nodeP_4 = nodePer.getLastChild();
		
		//删除子节p4
		nodePer.removeChild(nodeP_4);
		
		//将操作内容回写至文件
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("src//person.xml"));
	}
}

4.改变文本节点

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.Node;
import org.w3c.dom.NodeList; 

public class Modify {
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		
		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
		
		Document document = documentBuilder.parse("src//person.xml");
		
		//获取age集合
		NodeList nodeList = document.getElementsByTagName("age");
		
		//获取第二个age节点
		Node node = nodeList.item(1);
		
		//获取age里的文本节点
		Node textNode = node.getLastChild();
		
		//设置文本节点内容
		textNode.setTextContent("100");
		
		//回写
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.transform(new DOMSource(document), new StreamResult("src//person.xml"));
	}
}

5.遍历整个xml节点

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Traverse {
	public static void main(String[] args) throws Exception {
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

		Document document = documentBuilder.parse("src//person.xml");

		list(document);
	}

	private static void list(Node nodeF) {

		if (nodeF.getNodeType() == Node.ELEMENT_NODE) {
			System.out.println(nodeF);
		}
		
		// TODO 自动生成的方法存根
		NodeList nodeListF = nodeF.getChildNodes();

		for (int i = 0; i < nodeListF.getLength(); i++) {

			Node node = nodeListF.item(i);

			// 直接打印节点会将回车以及空格都会打印出来,在前边做一个判断
			// System.out.println(node);

			list(node);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42061805/article/details/81592270