#使用jaxp操作xml文件
package com.jaxp.xml;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.IOException;
/**
* 实现jaxp操作xml
*/
public class Demo_1 {
public static void main(String[] args) throws Exception {
// selectAll();
// selectOne();
// addSex();
// modifySex();
// delSex();
listElement();
}
//查告第一个name元素的值
public static void selectOne() throws IOException, SAXException, ParserConfigurationException {
/**
* 1.创建解析器工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml,返回document
* 4.得到所有name元素
* 5.使用返回集合,里面方法item,下标获取具体的元素
* 6.得到具体的值,使用getTextContent
*/
//1.创建工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("XML/src/person.xml");
NodeList list = document.getElementsByTagName("name");
System.out.println(list.item(0).getTextContent());
}
//查告所有name元素
public static void selectAll() throws ParserConfigurationException, SAXException, IOException {
//查告所有name元素 的值
/*
1.创建解析器工厂
2.根据解折器工厂创建解析器
3.解析xm1返adocument
*/
//创建解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//解析xml返回document
Document duument = builder.parse("XML/src/person.xml");
NodeList list = duument.getElementsByTagName("name");
for (int i = 0; i < list.getLength(); i++) {
Node name1 = list.item(i);//得到每一个name元素
//得到name元素里面的内容
String s = name1.getTextContent();
System.out.println(s);
}
}
//在第一个p1末尾添加<sex>女</sex>
public static void addSex() throws ParserConfigurationException, IOException, SAXException, TransformerException {
/**
* 1.创建解析器工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml,返回document
* 4.得到第一个p1
* 得到所有p1,使用item方法下标得到
* 5、创建sex标签createElement
* 6.创建文本createTextNode
* 7、把文本添加到sex下面 appendChild
* 8.把sex添加到第一一个p1下面
* 9.回写xml
*/
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("XML/src/person.xml");
NodeList list = document.getElementsByTagName("p1");
Node p1 = list.item(0);
Element sex1 = document.createElement("sex");
Text text1 = document.createTextNode("女");
sex1.appendChild(text1);
p1.appendChild(sex1);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("XML/src/person.xml"));
}
//修改第一个p1sex的内容为男
public static void modifySex() throws ParserConfigurationException, IOException, SAXException, TransformerException {
/*
* 1、创建解析器工厂
¥2.根据解析器工厂创建解析器
* 3.解析xml,近回document
* 4.得到sex
item方法
5、修改seX里面的值setTextContent方法
6.回写xml
*/
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse("XML/src/person.xml");
Node sex1 = document.getElementsByTagName("sex").item(0);
sex1.setTextContent("男");
//回写
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("XML/src/person.xml"));
}
//删<sex>nan</sex>节点
public static void delSex() throws Exception {
/*
* 1.创建解析器工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml,返回document
事4、获取sex元素
* 5.获取sex的父节点
* 6.娜除使用父节点利除removeChild方法
* 7.回写xml
* */
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse("XML/src/person.xml");
Node sex1 = document.getElementsByTagName("sex").item(0);
Node p1 = sex1.getParentNode();
p1.removeChild(sex1);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("XML/src/person.xml"));
}
//遍历所有节点
public static void listElement() throws Exception {
/**
* 1.创建解析器工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml,返回document
* 4.得到根节点
* 5.得到根节点的子节点
* 6.得到根节点的子节点的子节点
*/
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse("XML/src/person.xml");
//编写一个方法来实现遍历
list1(document);
}
//递归遍历的方法
private static void list1(Node node) {
if(node.getNodeType()==Node.ELEMENT_NODE){
System.out.println(node.getNodeName());
}
//得到一层子节点
NodeList list = node.getChildNodes();
//遍历list
for (int i = 0; i < list.getLength(); i++) {
//得到每一个节点
Node node1 = list.item(i);
//继续得到node1的子节点
//node1.getChildNode
list1(node1);
}
}
}