jaxp解析xml的增删改查操作
jaxp中常用的解析方法
/*jaxp是javase的一部分
** jaxp解析器在jdk的javax.xml.parsers包里面
** 四个类:分别是针对dom和sax解析使用的类
*** dom:
DocumentBuilder : 解析器类
- 这个类是一个抽象类,不能new,
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取
- 一个方法,可以解析xml parse("xml路径") 返回是 Document 整个文档
- 返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找*/
//在document里面方法
getElementsByTagName(String tagname)
//这个方法可以得到标签
//返回集合 NodeList
createElement(String tagName)
//创建标签
createTextNode(String data)
// 创建文本
appendChild(Node newChild)
// 把文本添加到标签下面
removeChild(Node oldChild)
// 删除节点
getParentNode()
// 获取父节点
//NodeList list
getLength() //得到集合的长度
item(int index)//下标取到具体的值
for(int i=0;i<list.getLength();i++) {
list.item(i)
}
getTextContent()
//得到标签里面的内容
//DocumentBuilderFactory: 解析器工厂
// 这个类也是一个抽象类,不能new
newInstance() //获取 DocumentBuilderFactory 的实例。
/*** sax:
SAXParser:解析器类
SAXParserFactory: 解析器工厂*/
创建解析器
public static Document createdoc() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/TV.xml");
return document;
}
使用jaxp实现查询操作
public static void query()throws Exception{
Document document = createdoc();
diguiquery(document);
}
private static void diguiquery(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.getChildNodes()
diguiquery(node1);
}
}
使用jaxp实现删除操作
public static void delTime() throws Exception {
Document document = createdoc();
Node TIME = document.getElementsByTagName("DESCRIPTION").item(0);
Node p1 = TIME.getParentNode();
p1.removeChild(TIME);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/TV.xml"));
}
使用jaxp实现修改操作
public static void changeDate() throws Exception {
Document document = createdoc();
Node DATE = document.getElementsByTagName("DATE").item(0);
DATE.setTextContent("20-3-30-10:34");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/TV.xml"));
}
使用jaxp实现添加操作
public static void addsex() throws Exception {
Document document = createdoc();
Node DATE = document.getElementsByTagName("DATE").item(0);
Element element = document.createElement("sex");
Text text = document.createTextNode("nan");
element.appendChild(text);
DATE.appendChild(element);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/TV.xml"));
}
注:当修改xml文件当中的标签或者内容时,切记最后进行回写操作。你当前操作的document对象是在内存当中的,不进行回写,无法将修改后的结果显示出来。