标签:tno [] out code ace put not form dem
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Demo {
private Document document;
/**
* 获得DOM树,分三步,第一步,获得解析器工厂。第二步,根据解析器工厂获得解析器。第三步,解析器解析XML文件获得Document对象
*/
public void getDom() {
//获得解析器工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
//获得解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//获取对象
document=builder.parse("phone.xml");
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取xml文件的所有元素结点
*/
public void showInfo() {
//根据节点名字找到节点Brand,返回一个NodeList集合
NodeList brands = document.getElementsByTagName("Brand");
//遍历Brand,拿到每一个Brand的Node节点,
for(int i=0;i<brands.getLength();i++) {
Node node = brands.item(i);
//将Node节点转为元素节点
Element eleBrand=(Element)node;
//根据属性获得值
System.out.println(eleBrand.getAttribute("name"));
//找出当前Brands下的孩子节点
NodeList types = eleBrand.getChildNodes();
for(int j=0;j<types.getLength();j++) {
Node typeNode=types.item(j);
//判断当前Node节点是否元素节点
if(typeNode.getNodeType()==Node.ELEMENT_NODE) {
Element eleType=(Element)typeNode;
System.out.println("\t"+eleType.getAttribute("name"));
}
}
}
}
/**
* 增加元素
*/
public void addElement() {
//创建Brand 元素
Element brand=document.createElement("Brand");
//设置Brand元素的属性
brand.setAttribute("name", "三星");
//创建Type元素
Element type =document.createElement("Type");
//设置Type元素的属性
type.setAttribute("name", "note3");
//将Type元素弄成Brand的子元素
brand.appendChild(type);
//将Brand放到根元素PhoneInfo里面去,
document.getElementsByTagName("PhoneInfo").item(0).appendChild(brand);
save();
}
/**
* 修改Brand元素,增加一个id属性
*/
public void updateEle() {
//拿到所有Brand元素
NodeList brands =document.getElementsByTagName("Brand");
//遍历,转换成元素节点
for(int i=0;i<brands.getLength();i++) {
Element elebrand=(Element)brands.item(i);
//通过setAttribute方法增加id属性
elebrand.setAttribute("id", i+"");
save();
}
}
/**
* 删除元素
*/
public void deleteEle() {
NodeList brands =document.getElementsByTagName("Brand");
for(int i=0;i<brands.getLength();i++) {
Element elebrand=(Element)brands.item(i);
//判断当前元素name属性是等于三星的话,就执行
if(elebrand.getAttribute("name").equals("三星")) {
//getParentNode拿到当前节点的父亲节点再使用removeChild删除。
elebrand.getParentNode().removeChild(elebrand);
}
}
save();
}
/**
* 保存xml文件,需要转换器,将Dom数转化为文档文件。
*/
public void save() {
//首先创建转换器工厂
TransformerFactory factory=TransformerFactory.newInstance();
//设置缩进
factory.setAttribute("indent-number", 4);
try {
//通过转换器工厂获得转换器
Transformer former=factory.newTransformer();
//允许缩进
former.setOutputProperty(OutputKeys.INDENT, "YES");
//创建源
DOMSource source=new DOMSource(document);
//创建保存的目的地,用输出流
OutputStream out=new FileOutputStream("phone.xml");
StreamResult result=new StreamResult(out);
//转换器需要两个参数,一个是源,一个是目的地
former.transform(source, result);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Demo demo=new Demo();
demo.getDom();
demo.updateEle();
demo.addElement();
demo.deleteEle();
demo.showInfo();
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<PhoneInfo>
<Brand id="0" name="华为">
<Type name="u920"/>
<Type name="4112"/>
<Type name="970"/>
</Brand>
<Brand id="1" name="苹果">
<Type name="i8"/>
<Type name="xs"/>
<Type name="xr"/>
</Brand>
</PhoneInfo>
标签:tno [] out code ace put not form dem
原文地址:https://www.cnblogs.com/EasyInsomnia/p/10144641.html