xml的增,删,改,查

学习王昭珽老师的心得体会!
xml部分
<?xml version="1.0" encoding="utf-8" standalone="no"?>
< 书架>

  <书 出版社 = "湖北文理学院">
         <书名 >java就业指导教程</书名>
       <作者>张孝祥</作者>
       <售价>38元</售价>
     <内部价>15.00元</内部价>

 </书>

  <书>
       <书名 >javaScripe网页开发</书名>
      <作者>毕向东</作者>
      <售价>28.00</售价>
     </书>
</书架>

JAVA代码部分
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 JaxpDomDemo {
//利用jaxp进行dom解析
 /**
  * @param args
  * @throws ParserConfigurationException
  */
 public static void main(String[]  args) throws Exception {
  // TODO Auto-generated method stub
        //*得到解析工厂DocumentBuilderFactory
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  
  //*得到解析器DocumentBuilder
  DocumentBuilder builder = factory.newDocumentBuilder();
  
  //解析指定的xml文档,得到代表内存的Dom树的Document的对象
  Document document =  builder.parse("src/book.xml");
     test8(document);
 }




        //----------------1.得到某个具体节点内容:打印第二本书的作者

 public static void test1(Document document){
  //根据标签的名称,获取所有的作者的元素
  
     NodeList nl = document.getElementsByTagName("作者");
  //按照索引取第二个元素
  Node node = nl.item(1);//搜索所有的作者然后取第二个,他是按内容搜索,然后排列!
  //获取该节点的内容,打印该元素的文本
  String text = node.getTextContent();
  System.out.println(text);
  
 }
 
 
     //----------------2.遍历所有元素的节点(递归)

    public static void test2(Node node){
     //判断当前节点是不是一个元素节点
      if(node.getNodeType() == Node.ELEMENT_NODE){
       //如果节点,则打印它的名称
       System.out.println(node.getNodeName());
      }
      //获取该节点的孩子节点
      NodeList nl = node.getChildNodes();
      //确定孩子们的个数
      int len = nl.getLength();
      //递归遍历输出孩子们的个数
      for(int i = 0;i < len;i++){
       Node n = nl.item(i);
       test2(n);
      }
    } 



  //--------------3.修改某个元素的主体内容

      public static void  test3(Document document) throws Exception{
       //找到第一本书的售价
       //并改变它的售价
       NodeList nl3 = document.getElementsByTagName("售价");
       //得到第一本书的“售价“的节点
       Node text3 = nl3.item(0);
       //设置改变节点的内容
       text3.setTextContent("38.00元");
       
       //然后将改变后的dom树输入book.xml中
       TransformerFactory factory = TransformerFactory.newInstance();
       Transformer ts = factory.newTransformer();//将改变后的document 的树转到xml文件里
       ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
       
     
       System.out.println(text3.getTextContent());
      }
   

       //---------------4.向某个元素的节点中增加子元素节点:在第一本树增加内部价:15元

      public static  void test4(Document document)throws Exception{
       //创建一个新的元素并设置起主题内容
       Element e =  document.createElement("内部价");
       //找到第一本书
       e.setTextContent("15.00元");
       //挂接到第一本书上
       Node firstNode = document.getElementsByTagName("书").item(0);
       firstNode.appendChild(e);
       //然后将新添加后的dom树输入book.xml中
       TransformerFactory factory = TransformerFactory.newInstance();
       Transformer ts = factory.newTransformer();//将改变后的document 的树转到xml文件里
       ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
      }



         //------------5.向指定元素增加同级元素节点

      public static  void test5(Document document)throws Exception{
         //增加一个批发价
       Element e =  document.createElement("批发价");
       //找到第一本书
       e.setTextContent("8.00元");
       //在第一本书的售价前挂接一本批发价
       Node firstNode = document.getElementsByTagName("售价").item(0);
       //新添加的节点一定要在父元素的之后插入插入节点
       firstNode.getParentNode().insertBefore(e, firstNode);
     
       //然后将新添加后的dom树输入book.xml中
       TransformerFactory factory = TransformerFactory.newInstance();
       Transformer ts = factory.newTransformer();//将改变后的document 的树转到xml文件里
       ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
      }



         //-----------------6.删除指定元素

      public static  void test6(Document document)throws Exception{
     
        Node find1 = document.getElementsByTagName("批发价").item(0);
        //找到要删除的节点,然后用爸爸删除
        find1.getParentNode().removeChild(find1);
      
        //然后将新添加后的dom树输入book.xml中
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer ts = factory.newTransformer();//将改变后的document 的树转到xml文件里
        ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
       }



         //---------------7.操作xml文件的属性:查找第一本书的出版社

      public static  void test7(Document document)throws Exception{
       //找到要添加节点的属性
       Node find2 = document.getElementsByTagName("书").item(0);
        //打印他的属性
       Element e = (Element) find2;//书才有的属性(Element, node不具有属性)
       System.out.println(e.getAttribute("出版社")+" 出版社");
      }



      //-----------8.添加一个属性给第二本书

      public static  void test8(Document document)throws Exception{
       //找到要添加节点的属性
       Node find2 = document.getElementsByTagName("书").item(1);
        //打印他的属性
       Element e = (Element) find2;//书才有的属性(Element, node不具有属性)
       e.setAttribute("出版社", "原襄樊学院");
       
       //然后将新添加后的dom树输入book.xml中
       TransformerFactory factory = TransformerFactory.newInstance();
       Transformer ts = factory.newTransformer();//将改变后的document 的树转到xml文件里
       ts.transform(new DOMSource(document), new StreamResult("src/book.xml"));
      }
}     



//得到的启示:看视频一定要认真,在认真,注意消化知识点,
//理解什么意思,不要懒惰,以最佳的状态去听讲,
//可以慢下来,注意好每一个细节操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值