要解析XML文件,首先要获得XML的DOM树,方法如下:
//获取DOM解析器工
//DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//获取DOM解析器
//DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//用DOM解析器解析XML,并生成DOM树
//Document document = documentBuilder.parse("src/book.xml");
XML文档如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书 大小="非常非常大">
<书名>Java就业培训教程</书名>
<作者>张孝详</作者>
<批发价>8元</批发价>
<售价>28.0元</售价>
</书>
<书 大小="猪肉">
<书名>JavaScript从入门到精通</书名>
<作者>戴振良</作者>
<售价>88.00元</售价>
</书>
</书架>
需要:
// 1、得到某个具体的节点内容
//打印第2本书的作者元素的主体内容
//Document.getElementsByTagName(String tagName);获取元素列表
//NodeList.item(int index);获取元素列表中的某个节点
//Node.getTextContent();获取节点主体内容
// 2、遍历所有元素节点(用递归)
//Node.getNodeType();获取节点类型
//node.getNodeName();获取节点名称
//node.getChildNodes();获取子节点列表
// 3、修改某个元素节点的主体内容
//修改第2个售价节点的内容
//Node.setTextContent();设置节点主体内容
//注:设置后要把DOM写回XML文件
//凡是set(设置)操作的,设置的是内存里的DOM树,需要把这个树写回文件,方法如下:
//TransformerFactory transformerFactory = TransformerFactory.newInstance();
// Transformer transformer = transformerFactory.newTransformer();
// transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
// 4、向指定元素节点中增加子元素节点
//在第1本书中增加子元素节点,<内部价>58.00元</内部价>
//Document.createElement();创建元素
//Node.appendChild();增加元素到子节点
// 5、向指定元素节点上增加同级元素节点
//在第一本书的售价前面插入<批发价>10</批发价>
//Node.insertBefore(新元素,);插入一个新元素到子节点前面
// 6、删除指定元素节点
//删除内部价
//Node.removeChild(子节点);删除指定的子节点
//把DOM写回XML文件
// 7、操作XML文件属性
//获取第一个“书”的“大小”的属性值
//Element.getAttribute();获取属性
// 8、操作XML文件属性
//设置第一个“书”的“大小”的属性值\
//Element.setAttribute(属性名,属性值);
package com.itheima;
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.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.NodeList;
import org.w3c.dom.Node;
public class JaxpCRUD {
public static void main(String[] args) throws Exception {
//获取DOM解析器工厂,以便生产解析器
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//获取DOM解析器,以便解析DOM
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//解析DOM
Document document = documentBuilder.parse("src/book.xml");
//test01(document);
// test02(document);
// test03(document);
// test04(document);
// test05(document);
// test06(document);
// test07(document);
test08(document);
}
// 1、得到某个具体的节点内容
//打印第2本书的作者元素的主体内容
private static void test01(Document document) throws Exception {
NodeList list = document.getElementsByTagName("作者");
// System.out.println(list.getLength());
Node node = list.item(1);
String content = node.getTextContent();//获取主体内容
System.out.println(content);
}
// 2、遍历所有元素节点
private static void test02(Node node) {
if(node.ELEMENT_NODE==node.getNodeType())
System.out.println(node.getNodeName());
if(node.hasChildNodes()) {
NodeList nodeList = node.getChildNodes();
for(int i=0;i<nodeList.getLength();i++)
test02(nodeList.item(i));
}
}
// 3、修改某个元素节点的主体内容
private static void test03(Document document) throws Exception {
Node price = document.getElementsByTagName("售价").item(1);
price.setTextContent("88.00元");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
// 4、向指定元素节点中增加子元素节点
在第1本书中增加子元素节点,<内部价>58.00元</内部价>
private static void test04(Document document) throws Exception {
//获得第一个 书节点
Node bookNode = document.getElementsByTagName("书").item(0);
//创建一个元素,并设置主体内容
Element innerPriceElement = document.createElement("内部价");
innerPriceElement.setTextContent("12.00元");
//把元素增加到节点,即成为了元素节点
bookNode.appendChild(innerPriceElement);
//把DOM写回XML文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
// 5、向指定元素节点上增加同级元素节点
//在第一本书的售价前面插入<批发价>10</批发价>
private static void test05(Document document) throws Exception{
//得到每一个售价
Node salePriceNode = document.getElementsByTagName("售价").item(0);
//创建新元素,并设置主体内容
Element wholesaleElement = document.createElement("批发价");
wholesaleElement.setTextContent("8元");
//把新元素增加到节点
salePriceNode.getParentNode().insertBefore(wholesaleElement, salePriceNode);
//把DOM写回XML文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
// 6、删除指定元素节点
删除内部价
//把DOM写回XML文件
private static void test06(Document document) throws Exception {
//获得内部价节点
Node innerPriceNode = document.getElementsByTagName("内部价").item(0);
//删除内部节点
innerPriceNode.getParentNode().removeChild(innerPriceNode);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
// 7、操作XML文件属性
//获取第一个“书”的“大小”的属性值
private static void test07(Document document){
Node bookNode = document.getElementsByTagName("书").item(0);
Element bookElement = (Element)bookNode;
String attrValue = bookElement.getAttribute("大小");
System.out.println(attrValue);
}
// 8、操作XML文件属性
//设置第一个“书”的“大小”的属性值
private static void test08(Document document) throws Exception{
Node bookNode = document.getElementsByTagName("书").item(0);
Element bookElement = (Element)bookNode;
bookElement.setAttribute("大小","非常非常大");
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
}
用DOM方式解析XML(使用JAXP工具)--第一天
最新推荐文章于 2024-08-09 08:47:32 发布