Java用DOM操作xml

时间:2023-03-09 02:30:14
Java用DOM操作xml
JAXP DOM方式解析XML文档实例
增删改查
package jiexi; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; //JAXP DOM方式解析XML文档实例
public class JaxpCRUD {
public static void main(String[] args) throws Exception {
//1,得到解析器DocumentBuilder
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
//2,得到代表整个xml文档的Document对象
Document document=db.parse("src/book.xml");
test1(document);
}
//1、得到具体节点的内容
public static void test1(Document document){//得到第二本书的售价
NodeList list=document.getElementsByTagName("售价");
int length=list.getLength();//获得元素节点的个数
System.out.println(length);
Node node=list.item(1);//角标从0开始
System.out.println(node.getTextContent()); }
//2、遍历所有元素节点
public static void test2(Node node){
//1,判断node是否是元素节点,如果是,打印该节点
if(node.getNodeType()==Node.ELEMENT_NODE ){//判断是否是元素节点
System.out.println(node.getNodeName());
}
//2,判断是否有孩子节点
NodeList children=node.getChildNodes();
for(int i=0;i<children.getLength();i++){
Node n=children.item(i);
test2(n);//3,递归调用
}
}
//3、修改某个元素节点的主题内容
    //将第一本书的售价改为49元
    public static void test3(Document document)throws Exception{
      //1,找到第一本书的售价节点
      NodeList list=document.getElementsByTagName("售价");
      Node node=list.item(0);
      //2,将主题内容改为49元
      node.setTextContent("49元");
      //3,更新设置
      Transformer ts = TransformerFactory.newInstance().newTransformer();
      ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    }
//4、向指定元素节点中增加子元素节点
    //向第一本书中添加节点<优惠价>39</优惠价>
    public static void test4(Document document)throws Exception{
      //1,找到增加节点处的父级元素
      Node node=document.getElementsByTagName("书").item(0);
      //2,创建节点,并添加主体内容
      Element ele=document.createElement("优惠价");
      ele.setTextContent("39元");
      //3,节点添加到父级元素中
      node.appendChild(ele);
      //4,更新设置
      Transformer ts=TransformerFactory.newInstance().newTransformer();
      ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    }
    //5、向指定元素节点上增加同级元素节点
    //向第二本书中添加优惠价
    public static void test5(Document document)throws Exception{
      //1,找到添加元素的兄弟节点
      Node node=document.getElementsByTagName("售价").item(1);
      //2,创建节点,并添加内容
      Element ele=document.createElement("优惠价");
      ele.setTextContent("18元");
      //3,节点添加
      node.getParentNode().appendChild(ele);
      //4,更新设置
      Transformer ts=TransformerFactory.newInstance().newTransformer();
      ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    }
    //6、删除指定元素节点
    //删除优惠价
    public static void test6(Document document)throws Exception{
      //1,获得优惠价节点
      Node node=document.getElementsByTagName("优惠价").item(0);
      //2,删除节点
      node.getParentNode().removeChild(node);
      //3,更新设置
      Transformer ts=TransformerFactory.newInstance().newTransformer();
      ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
    }
    //7、操作XML文件属性
public static void test7(Document document){
//得到第一本书的属性
Node node=document.getElementsByTagName("书").item(0);
if(node.getNodeType()==Node.ELEMENT_NODE){
Element ele=(Element)node;
System.out.println(ele.getAttribute("出版社"));
}
}
//设置第二本书的属性值为新华
public static void test8(Document document)throws Exception{
Node node=document.getElementsByTagName("书").item(1);
Element ele=(Element)node;
ele.setAttribute("出版社", "新华");
TransformerFactory tf=TransformerFactory.newInstance();
Transformer ts=tf.newTransformer();
ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
}