目录
一、DOM解析XML技术
- 基于XML文档树结构的解析
- 适用于多次访问的XML文档
- 特点:;比较消耗资源
二、解析XML技术的步骤
<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo>
<Brand name="华为">
<Type>Mate30</Type>
<Type>Mate40</Type>
<Type>Mate50</Type>
</Brand>
<Brand name="苹果">
<Type>iphone10</Type>
<Type>iphone11</Type>
<Type>iphone12p</Type>
</Brand>
</PhoneInfo>
- 创建解析器工厂对象
- 解析器工厂对象创建解析器对象
- 解析器对象指定XML文件创建Document对象
- 以Document对象为七点操作DOM树
//创建一个全局变量,Document(表示整个xml文档)
Document document=null;
public void getDocument(){
//创建解析器工厂
DocumentBuilderFcatory factory = DocumentBuildFactory.newInstance();
//用解析器工厂创建解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//利用解析器解析xml文件
document = builder.parse(new FileInputStream("resource\\news.xml"));
}
获取xml文件中的结点元素的内容
//打印xml中的所有品牌
public void getBrands(){
//获得所有品牌结点(即Node的集合)
NodeList node = document.getElementsByTagName("Brand");
//遍历NodeList集合
for(int i = 0; i<node.getLength(); i++){
//获得每个结点的值
Node item = node.item(i);
//将结点类型转换为元素类型
Element e = (Element)item;
//获得元素的name属性的值
String name = e.getAttribute("name");
System.out.print(name);
}
}
获得Brand节点下的所有子节点
public void getChildren(){
//获取brand结点(为NodeList类型)
NodeList node = document.getElementsByTagName("Brand");
//遍历Node结点
for(int i = 0; i<node.getLength();i++){
Node item = node.item(i);
NodeList childItem = item.getChildNodes();
for(int j =0; j <childItem.getLength(); j++){
Node child = childItem.item(j);
if(child instanceof Element){
Text text = (Text)child.getFirstChild();
System.out.print(text.getWholeText());
}
}
}
}
修改Brand结点的name属性为iphone,iPhone10修改为iPhone100
public void change(){
NodeList node = document.getElementsByTagName("Brand");
Node nodeSceond = node.item(1);
Element e = (Element)nodeSceond;
//修改Brand的name属性的值为iPhone
e.setAttribute("name","iphone");
NodeList nodeChild = e.getChildNodes();
for(int i=0;i<nodeChild.getLength();i++){
Node child = nodeChild.item(i);
if(child instanceof Element){
if(child.getFirstChild().getNodeValue().equals("iphone10")){
Text text=(Text)child.getFirstChild();
text.setData("iphone100");
return;
}
}
}
}
删除结点:
Node root = document.getElementsByTagName("PhoneInfo").item(0);
Node iphone = document.getElementsByTagName("Brand").item(1);
root.removeChild(iphone);
增加结点:
public void createNode(){
Node root = document.getElementsByTagName("PhoneInfo").item(0);
Element brand = document.createElement("Brand");
brand.setAttribute("name","三星");
Element type = document.createElement("Type");
Element type1 = document.createElement("Type");
Text t = document.createTextNode("Galaxy10");
Text t1 = document.createTextNode("Galaxy20");
type.appendChild(t);
type1.appendChild(t1);
brand.appendChild(type);
brand.appendChild(type1);
root.appendChild(document.createTextNode("\n"));
root.appendChild(brand);
}