收藏信息.xml
DOM实现增删改查
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class ParseDom {
//document对象:将整个dom文档解析成的对象,该对象可以处理xml的增删改查功能
private document dom = null;
//获取document对象
public void getDom(String path) {
//dom解析工厂来创建dom对象
documentBuilderFactory factory = documentBuilderFactory.newInstance();
//由工厂创建解析器,该解析器可以将xml文件构造成document对象
try {
documentBuilder builder = factory.newdocumentBuilder();
//解析文档创建dom
dom = builder.parse(path);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//打印手机信息:先打印品牌,然后再遍历品牌下面的型号
public void getInfo() {
getDom("收藏信息.xml");
//获取标签Brand的节点对象集合
NodeList brands = dom.getElementsByTagName("Brand");
for (int i = 0; i < brands.getLength(); i++) {
Node brandNode = brands.item(i);
//获取品牌节点里面的属性
Element brandElement = (Element) brandNode;
String brandName = brandElement.getAttribute("name");
System.out.println(brandName);
//获取每个品牌里面的子元素型号,再遍历打印
NodeList types = brandElement.getChildNodes();
for (int j = 0; j < types.getLength(); j++) {
Node typeNode = types.item(j);
//判断是标签元素才能转成元素对象
if (typeNode.getNodeType() == Node.ELEMENT_NODE) {//typeNode instanceof Element
Element typeElement = (Element) typeNode;
String typeName = typeElement.getAttribute("name");
System.out.println("t"+typeName);
}
}
}
}
//添加节点:三星品牌 型号NOTE4
public void addElement(String brand,String type) {
getDom("收藏信息.xml");
//创建品牌节点和属性
Element brandElement = dom.createElement("Brand");
brandElement.setAttribute("name", brand);
//创建型号节点和属性
Element typeElement = dom.createElement("Type");
typeElement.setAttribute("name", type);
//追加到相应的位置
brandElement.appendChild(typeElement);
dom.getElementsByTagName("PhoneInfo").item(0).appendChild(brandElement);
saveXML("收藏信息.xml");
}
//保存到文件 需要传输器将dom对象保存到指定的文件中
public void saveXML(String path) {
//创建传输器工厂
TransformerFactory factory = TransformerFactory.newInstance();
try {
//由工厂创建传输器
Transformer transformer = factory.newTransformer();
//设置编码方式
transformer.setOutputProperty("encoding", "GB2312");
//传输
DOMSource source = new DOMSource(dom);
StreamResult result = new StreamResult(new File(path));
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//删除节点
public void delElement() {
getDom("收藏信息.xml");
//找到删除的节点
NodeList list = dom.getElementsByTagName("Brand");
for (int i = 0; i < list.getLength(); i++) {
Element brandElement = (Element)list.item(i);
String brandName = brandElement.getAttribute("name");
if (brandName.equals("三星")) {
brandElement.getParentNode().removeChild(brandElement);
}
}
saveXML("收藏信息.xml");
}
//修改节点
public void xgElement() {
getDom("收藏信息.xml");
//找到修改的节点
NodeList list = dom.getElementsByTagName("Brand");
for (int i = 0; i < list.getLength(); i++) {
Element brandElement = (Element)list.item(i);
String brandName = brandElement.getAttribute("name");
if (brandName.equals("华为")) {
brandElement.setAttribute("name", "中国华为");
}
}
saveXML("收藏信息.xml");
}
//主函数
public static void main(String[] args) {
ParseDom parseDom = new ParseDom();
//parseDom.addElement("三星", "NOTE4");
//parseDom.delElement();
//parseDom.xgElement();
parseDom.getInfo();
}
}
DOM4J实现增删改查
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class ParseDom4j {
private document dom = null;
private Element root =null;
//获取dom对象
public void getDom() {
SAXReader reader = new SAXReader();
try {
dom = reader.read("收藏信息.xml");
} catch (documentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取文件信息
public void getInfo() {
getDom();
//获取根节点
root = dom.getRootElement();
//获取brand节点的集合
Iterator
//用迭代器遍历brand
while(brandsIt.hasNext()) {
Element brand = brandsIt.next();
//打印name属性值
String brandName = brand.attributevalue("name");
System.out.println(brandName);
//打印型号
Iterator
while (typeIterator.hasNext()) {
Element type = typeIterator.next();
System.out.println("t"+type.attributevalue("name"));
}
}
}
//添加小米手机 型号:小米10
public void addPhone() {
getDom();
root = dom.getRootElement();
//创建手机品牌,添加到根节点下面
Element brandElement = root.addElement("Brand");
brandElement.addAttribute("name", "小米");
//创建手机型号,添加到品牌节点下面
brandElement.addElement("Type").addAttribute("name", "小米10");
//保存文件
saveXML(dom);
}
//保存到XML文件
public void saveXML(document dom) {
XMLWriter writer;
try {
writer = new XMLWriter((new FileOutputStream("收藏信息.xml")));
writer.write(dom);
writer.flush();
writer.close();
}catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//删除:根据标签名name属性名删除元素
public void delElement() {
getDom();
root = dom.getRootElement();
Iterator
while (brandIt.hasNext()) {
Element brandElement = brandIt.next();
//判断属性是否是小米
if (brandElement.attributevalue("name").equals("小米")) {
brandElement.getParent().remove(brandElement);
break;
}
}
saveXML(dom);
}
//修改
public void xgElement() {
getDom();
root = dom.getRootElement();
Iterator
while (brandIt.hasNext()) {
Element brandElement = brandIt.next();
if (brandElement.attributevalue("name").equals("中国华为")) {
brandElement.setAttributevalue("name", "华为");
break;
}
}
saveXML(dom);
}
//主函数
public static void main(String[] args) {
ParseDom4j parseDom4j = new ParseDom4j();
//parseDom4j.getDom();
//System.out.println(parseDom4j.dom);
//parseDom4j.addPhone();
//parseDom4j.delElement();
//parseDom4j.xgElement();
parseDom4j.getInfo();
}
}



