import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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;
public class XmlParse {
private Document doc=null;
//测试
public static void main(String[] args) throws Exception {
XmlParse aa=new XmlParse();
aa.getDocument();
//aa.add();
//aa.update();
aa.delete();
aa.show();
}
//获得XML文件
public void getDocument()throws Exception{
//1.建立一个DocumentBuilderFactory工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.
DocumentBuilder builder=factory.newDocumentBuilder();
//3.
doc=builder.parse("test.xml");
}
//查
public void show(){
// TODO Auto-generated method stub
//1.获取《Brand》所有的节点集合:
NodeList brands=doc.getElementsByTagName("Brand");
//2.遍历brand
for(int i=0;i<brands.getLength();i++){
//3。类似于数组, 用item(i):遍历返回的每一个节点
Node node=brands.item(i);//得到是元素节点
Element ele=(Element)node;
//4.通过属性名得到属性值
System.out.println(ele.getAttribute("name"));
//5.接下来查找brand元素节点里面的子节点,输出
NodeList types=ele.getChildNodes();
//6.遍历子节点
for(int j=0;j<types.getLength();j++){
Node typeNode=types.item(j);
//判断一下是否是元素节点
if(typeNode.getNodeType()==Node.ELEMENT_NODE){
//把元素节点转化成元素
Element eleType=(Element)typeNode;
System.out.println(eleType.getAttribute("name"));
}
}
}
}
//添加
private void add() throws Exception {
// TODO Auto-generated method stub
//1.建立一个元素 createElement("Brand");
Element ele=doc.createElement("Brand");
//2.给元素设置一个属性
ele.setAttribute("name", "苹果");
Element el=doc.createElement("Type");
el.setAttribute("name", "苹果6");
//3.将type作为brand的子元素添加进去 appendChild(el)
ele.appendChild(el);
//4.将brand添加到phoneinfo
doc.getElementsByTagName("PhoneInfo").item(0).appendChild(ele);
sava();
}
//删除
private void delete() throws Exception {
// TODO Auto-generated method stub
//1.先找到brand
NodeList brands=doc.getElementsByTagName("Brand");
for(int i=0;i<brands.getLength();i++){
Node brand=brands.item(i);
//3.把节点变成元素
Element ele=(Element)brand;
if(ele.getAttribute("name").equals("华为")){
//4.先找到父节点,通过父节点来删除getParentNode()
ele.getParentNode().removeChild(ele);
}
}
sava();
}
//修改 给他加一个id属性
private void update() throws Exception {
// TODO Auto-generated method stub
//1.首先获取brand指定标记名称的所有元素的集合
NodeList brands=doc.getElementsByTagName("Brand");
//2.遍历
for(int i=0;i<brands.getLength();i++){
Node brand=brands.item(i);
//3.把节点变成元素
Element ele=(Element)brand;
ele.setAttribute("id", i+"");
}
sava();
}
//增删改后的保存操作
private void sava() throws Exception {
// TODO Auto-generated method stub
//1.转换器工厂
TransformerFactory factory=TransformerFactory.newInstance();
//设置缩进
factory.setAttribute("indent-number", 4);
//2.通过转换器工厂得到一个转换器
Transformer transformer=factory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource Source=new DOMSource(doc);
StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream("test.xml"),"utf-8"));
//3.调方法transform()
transformer.transform(Source, result);
}
}
如何使用DOM解析XML文件?
猜你喜欢
转载自blog.csdn.net/Java_stud/article/details/82349882
今日推荐
周排行