目录
使用jaxp实现查询指定节点内容
步骤:
- 创建解析器工厂
- 根据解析器工厂创建解析器
- 解析xml,返回document
- 得到所有的name元素
- 遍历集合得到第一个name元素
- 得到name里具体的值
private static void selectSin() throws Exception {
//1.创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.根据解析器工厂创建解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.解析xml,返回document
Document doc=db.parse("person.xml");
//4.得到所有的name元素
NodeList list=doc.getElementsByTagName("name");
//5.遍历集合得到第一个name元素
Node name=list.item(0);
//6.得到name里具体的值
System.out.println(name.getTextContent());
}
使用jaxp实现查询所有指定节点的内容
步骤:
- 创建解析器工厂
- 根据解析器工厂创建解析器
- 解析xml,返回document
- 得到所有的name元素
- 遍历list集合,得到所有的name元素的值
private static void selectAll() throws Exception{
//创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//根据解析器工厂创建解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//解析xml,返回document
Document doc=db.parse("person.xml");
//得到所有的name元素
NodeList list=doc.getElementsByTagName("name");
//遍历list集合,输出所有的name元素值
for(int i=0;i<list.getLength();i++) {
Node name=list.item(i);
System.out.println(name.getTextContent());
}
}
使用jaxp实现查询所有节点
步骤:
- 创建解析器工厂
- 根据解析器工厂创建解析器
- 解析xml,返回document
- 得到根节点,递归获取所有节点,编写一个list()方法实现
private static void listElement() throws Exception {
//1.创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.通过解析器工厂创建解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.解析xml返回document
Document document = db.parse("person.xml");
//4.得到根节点,递归获取所有节点,编写一个方法实现
list(document);
}
private static void list(Node node) {
//判断节点是元素节点才打印
if(node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(node.getNodeName());
}
//得到一层子节点
NodeList nodeList = node.getChildNodes();
//遍历list
for(int i=0;i<nodeList.getLength();i++) {
//得到每一个节点
Node node2 = nodeList.item(i);
//继续得到node2的所有子节点
list(node2);
}
}
使用jaxp实现添加节点
步骤:
- 创建解析器工厂
- 根据解析器工厂创建解析器
- 解析xml,返回document
- 得到第一个p
- 创建sex标签 createElement
- 创建文本标签 createTextNode
- 把文本标签添加到sex标签下面 appendChild
- 把sex标签添加到p下面
- 回写xml
//1.创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.根据解析器工厂创建解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.解析xml返回document
Document doc = db.parse("person.xml");
//4.得到第一个p
Node p1 = doc.getElementsByTagName("p").item(0);
//5.创建sex标签 createElement
Element sex1 = doc.createElement("sex");
//6.创建text文本 createTextNode
Text text1 = doc.createTextNode("男");
//7.将文本添加到sex标签 appendChild
sex1.appendChild(text1);
//8.把sex添加到p下面
p1.appendChild(sex1);
//9.回写xml
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult("person.xml"));
使用jaxp实现修改指定节点内容
步骤:
- 创建解析器工厂
- 根据解析器工厂创建解析器
- 解析xml,返回document
- 得到sex
- 修改sex里边的值
- 回写xml
private static void modifySex() throws Exception {
//1.创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.通过解析器工厂创建解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.解析xml返回document
Document document = db.parse("person.xml");
//4.得到sex
Node sex = document.getElementsByTagName("sex").item(0);
//5.修改sex里边的值
sex.setTextContent("man");
//6.回写xml
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("person.xml"));
}
使用jaxp实现删除指定节点
步骤:
- 创建解析器工厂
- 根据解析器工厂创建解析器
- 解析xml返回document
- 得到sex节点
- 获取sex父节点
- 删除sex节点
- 回写xml
private static void deleteSex() throws Exception {
//1.创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.通过解析器工厂创建解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.解析xml返回document
Document document = db.parse("person.xml");
//4.得到sex
Node sex = document.getElementsByTagName("sex").item(0);
//5.获取sex父节点
Node p = sex.getParentNode();
//6.删除sex节点
p.removeChild(sex);
//7.回写xml
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("person.xml"));
}