xml


      xml操作:
        xml文件
          作用:
          格式:良好,有效
         
         java解析xml:
            dom  sax
                     dom4j
                     
      dom解析:
                Document doc=DocumentBuilder.parse("d:/xx.xml")      ;
                Element element=doc.getDocumentElement();
                ListNote list=element.notlist("book");
                
    dom4j解析:
            SaxReader reder = new SaxReader();
            Document doc=reder.read("D:/xx.xml");
            //ClassLoader.getResourceAsInstream("xx.xml")(根 扩展 应用)
            List<Element> list=doc.elements("book");
            //xpath  //元素名       //元素名/子元素         //元素名【name=''】    //@属性
            
xml  存储数据

xml:平台无关 语言无关 存储数据的语言
编码格式:gbk    支持中文编码  
         utf-8 国际通用编码格式

格式良好的xml:
   1必须有声明  <?xml version= encoding?>
   2 有切只有一个根元素
   3 标签对大小写敏感
   4 属性值要加""
   5 标签必须有开始有结束
   6 正确嵌套

有效的xml:
  自身携带dtd 
  xml 使用schema


dom解析xml的过程
  1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 NodeList list=doc.getElementsByTagName("元素名");
  5 for(NodeList ){
       取出元素
   }
  6for(NodeList ){
       取出元素的属性
       子元素
   }

dom增加节点:
   1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 Elemenet root =doc.getDocumentElement(); 找到根节点
  5 创建节点元素
    Element xele= doc.createElemment("Book");
    ele.setAttribute("属性名","属性值");
  6 创建节点元素的子元素
    Element ele= doc.createElemment("price");
    ele.setTextContent(45);
    xele.appendChild(ele);

 7 把新创建的节点添加到根元素中,
    root.appendChild(xele);

 8 内存中的树保存到文件中
   TransformerFactory fac = TransformerFactory .newInstancec();
   Transformer transform = fac.newTransformer();

   transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));
 
dom删除节点:
  1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 查找我要删除的元素 
     NodeList list=doc.getElementsByTagName("元素名");
    for(NodeList ){
       取出元素
   }
 5 删除
    元素.getParentNode().removeChild(元素);

 6 内存中的树保存到文件中
    TransformerFactory fac = TransformerFactory .newInstancec();
   Transformer transform = fac.newTransformer();

   transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

dom修改节点:

   1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 查找我要修改的元素 
     NodeList list=doc.getElementsByTagName("元素名");
    for(NodeList ){
       取出元素 比较条件
   }
 5  修改元素
      元素.setTextContent();
      元素.setAttribute();

 6 内存中的树保存到文件中
    TransformerFactory fac = TransformerFactory .newInstancec();
   Transformer transform = fac.newTransformer();

   transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));
html 网页展示
xml  存储数据

xml:平台无关 语言无关 存储数据的语言
编码格式:gbk    支持中文编码  
         utf-8 国际通用编码格式

格式良好的xml:
   1必须有声明  <?xml version= encoding?>
   2 有切只有一个根元素
   3 标签对大小写敏感
   4 属性值要加""
   5 标签必须有开始有结束
   6 正确嵌套

有效的xml:
  自身携带dtd 
  xml 使用schema


dom解析xml的过程
  1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 NodeList list=doc.getElementsByTagName("元素名");
  5 for(NodeList ){
       取出元素
   }
  6for(NodeList ){
       取出元素的属性
       子元素
   }

dom增加节点:
   1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 Elemenet root =doc.getDocumentElement(); 找到根节点
  5 创建节点元素
    Element xele= doc.createElemment("Book");
    ele.setAttribute("属性名","属性值");
  6 创建节点元素的子元素
    Element ele= doc.createElemment("price");
    ele.setTextContent(45);
    xele.appendChild(ele);

 7 把新创建的节点添加到根元素中,
    root.appendChild(xele);

 8 内存中的树保存到文件中
   TransformerFactory fac = TransformerFactory .newInstancec();
   Transformer transform = fac.newTransformer();

   transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));
 
dom删除节点:
  1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 查找我要删除的元素 
     NodeList list=doc.getElementsByTagName("元素名");
    for(NodeList ){
       取出元素
   }
 5 删除
    元素.getParentNode().removeChild(元素);

 6 内存中的树保存到文件中
    TransformerFactory fac = TransformerFactory .newInstancec();
   Transformer transform = fac.newTransformer();

   transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));

dom修改节点:

   1 创建DocumentBuilderFactory
  2 让工厂 DocumentBuilder
  3 Document doc=DocumentBuilder.parse("解析文件");
  4 查找我要修改的元素 
     NodeList list=doc.getElementsByTagName("元素名");
    for(NodeList ){
       取出元素 比较条件
   }
 5  修改元素
      元素.setTextContent();
      元素.setAttribute();

 6 内存中的树保存到文件中
    TransformerFactory fac = TransformerFactory .newInstancec();
   Transformer transform = fac.newTransformer();

   transform.transform(new DomSource(doc),new StreamResult(new FileOutputStream(文件)));
*******dom4j的解析
1 导入dom4j的jar包
2 组织代码:先创建 SAXReader 对象
  SAXReader reader = new SAXReader();
3 用Reader读取xml文件
  Document doc=reader.read("d:/xx.xml");
4获取根元素
  Element root=doc.getRootElemenet();
5 获取要解析的数据元素
  List<Element> list=root.elements("Book");

6 循环遍历解析list中数据
  for(Element e:list)
  {
        //获得属性
      e.attributeValue("id")
       //获取子元素
        e.element("name").getText()
  }

  
*******dom4j的增加元素:
1 导入dom4j的jar包
2 组织代码:先创建 SAXReader 对象
  SAXReader reader = new SAXReader();
3 用Reader读取xml文件
  Document doc=reader.read("d:/xx.xml");
4获取根元素
  Element root=doc.getRootElemenet();
5 在某元素下增加元素
   Element newx=root.addElement(元素名);

6 组织新元素的属性和子元素
   newx.addAttribute(属性名,属性值);
   
   Element child=newx.addElement(子元素名);
   child.setText(子元素文本);
7保存到文件中  
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("utf-8");
   XMLWriter writer = new XMLWriter(new FileWriter("D:/test1.xml"),format);
 writer.write(doc);
  writer.close();

*******dom4j的修改元素:
1 导入dom4j的jar包
2 组织代码:先创建 SAXReader 对象
  SAXReader reader = new SAXReader();
3 用Reader读取xml文件
  Document doc=reader.read("d:/xx.xml");
4获取根元素
  Element root=doc.getRootElemenet();
5 获取要解析的数据元素
  List<Element> list=root.elements("Book");

6 循环遍历解析list中数据 查找要修改的元素
 for(Element ele:list)
  if(ele.element("name").getText().equals("酸辣土豆丝")){
    ele.element("price").setText("20");
    ele.element("desc").setText("又酸又辣,很好吃");
  }
7保存到文件中  
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("utf-8");
   XMLWriter writer = new XMLWriter(new FileWriter("D:/test1.xml"),format);
 writer.write(doc);
  writer.close();

*******dom4j的删除元素:
1 导入dom4j的jar包
2 组织代码:先创建 SAXReader 对象
  SAXReader reader = new SAXReader();
3 用Reader读取xml文件
  Document doc=reader.read("d:/xx.xml");
4获取根元素
  Element root=doc.getRootElemenet();
5 获取要解析的数据元素
  List<Element> list=root.elements("Book");

6 循环遍历解析list中数据 查找要删除的元素
 for(Element ele:list)
  if(ele.element("name").getText().equals("酸辣土豆丝")){
    root.remove(ele); //删除元素
  }
7保存到文件中  
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("utf-8");
   XMLWriter writer = new XMLWriter(new FileWriter("D:/test1.xml"),format);
 writer.write(doc);
  writer.close();


 xml文件特点
 用途

 良好的xml:
 有效的xml:dtd schema

java解析xml
 dom  sax(Dom4j)
 
1xml 介绍
    xml 可扩展标记语言
        用途 :存储数据  交换数据  配置文件
        特点:与语言无关,平台无关,操作系统无关
    html 标记语言
        展示网页
        
  2xml 格式定义
     xml文件有两种:
        格式良好:
          1 声明   2 有且只有一个根  3 标签大小写敏感  4 标签要有结束  5 嵌套正确
         有效的:
            有文档类型的定义
            dtd   schema
            
 3 JAVA读写xml
      dom   整棵树放内存中 比较耗资源  多次访问快        JDOM
      sax    基于事件,省资源, 适合解析数据量大的xml  dom4j
    dom读的过程:

      dom解析的思路
         1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
            DocumentBuilder db= fac.newDocumentBuilder();
        2  Document doc=db.parse("D:/xx.xml");
        3  找我们需要解析的元素
          NodeList list = doc.getElemensByTagName("元素名");
        4 遍历获得元素信息
          for(int i=0li<list.getLength();i++)
          {
              Node nn= list.item(i);
             NodeList childs= nn.getChildNodes();
             
          }
   增加的过程
        1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
            DocumentBuilder db= fac.newDocumentBuilder();
        2  Document doc=db.parse("D:/xx.xml");
        3  查找要增加元素的父亲元素 father
            Elemenet root=doc.getDocumentElement();  根元素
        4  创建元素
            Element newEle=doc.createElement("元素名");        
            newEle.setAttribute(属性名,属性值);
             Element newchild= doc.createElement("子元素");
             newchild.setTextContent(文本内容);
             newEle.appendChild(newchild);
        5 新创建的元素加到树种
           father.appendChild(newEle);
        6 保存到文件中
           Transformer trans = TransformerFactory.newInstance().newTranformer();
           trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
           
           DomSource ds = new DomSource(doc);
           StreamResult sr = new StreamResult(new FileOutputStream("D:/xx.xml"));
           trans.tranform(ds,sr);
      
      
   删除的过程
            1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
            DocumentBuilder db= fac.newDocumentBuilder();
        2  Document doc=db.parse("D:/xx.xml");
        3  找我们需要解析的元素
          NodeList list = doc.getElemensByTagName("元素名");
        4 遍历查找要删除的元素
          for(int i=0li<list.getLength();i++)
          {
             Node item = list.item(i)
            if(符合)
            {
                  item.getParentNode().removeChild(item);
            }
             
          }
    5  保存到文件中
           Transformer trans = TransformerFactory.newInstance().newTranformer();
           trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
           
           DomSource ds = new DomSource(doc);
           StreamResult sr = new StreamResult(new FileOutputStream("D:/xx.xml"));
           trans.tranform(ds,sr);

   修改的过程   
           1 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
            DocumentBuilder db= fac.newDocumentBuilder();
        2  Document doc=db.parse("D:/xx.xml");
        3  找我们需要解析的元素
          NodeList list = doc.getElemensByTagName("元素名");
        4 遍历查找要修改的元素
          for(int i=0li<list.getLength();i++)
          {
             Node item = list.item(i)
            if(符合)
            {
                  NodeList list=item.getChildNodes();
                  for(遍历)
                  {
                       if 要修改的子元素
                         子元素.setTextContent(新值);
                  }
            }
             
          }
    5  保存到文件中
           Transformer trans = TransformerFactory.newInstance().newTranformer();
           trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
           
           DomSource ds = new DomSource(doc);
           StreamResult sr = new StreamResult(new FileOutputStream("D:/xx.xml"));
           trans.tranform(ds,sr);
           
           
dom4j解析xml:
    1  SAXReader reader = new  SAXReader();
    2  Document doc=reader.read(d:/xx.xml);
    3  获取根元素
       Element root=doc.getRootElement();
    4 找根元素下我需要的子元素
       List<Element> list=root.elements("movie");  //找一组子元素
     5 遍历集合类,查看每一个解析到的元素信息
       for(Element ele:list)
       {
           //获得元素属性
          String val= ele.attributeValue("id")
          //子元素
          Element name=ele.element("name");  //找一个子元素
         String nn= name.getName();
         String val = name.getText();
       }
           
dom4j增加xml:
     1  SAXReader reader = new  SAXReader();
    2  Document doc=reader.read(d:/xx.xml);
    3  查找要增加子节点的元素  aa
    4 添加新元素   Element newEle=aa.addElement("新元素名");
                        newEle.addAttribute("id","5");//为新元素添加属性
                        Element child1= newEle.addElement("子元素名字");
                        child1.setText(子元素的文本内容);
    5  字符流 输出流xml        保存修改到文件中
        OutputFormate formate = new OutputFormate();
        formate.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(new FileWriter("D:/xx.xml"), formate);
        writer.write(doc);
        
    writer.close();
    
dom4j删除xml:           
     1  SAXReader reader = new  SAXReader();
    2  Document doc=reader.read(d:/xx.xml);
    3  获取根元素
       Element root=doc.getRootElement();
    4 查找我们要删的元素
      for(Iterator<Element> ite= root.elementIterator();ite.hasNext; ){
          Element ele= ite.next();
          if(ele.attributeValue("id").equlas(23))
          {
              ele.getParent().remove(ele);
          }
      }
   5  字符流 输出流xml        保存修改到文件中
        OutputFormate formate = new OutputFormate();
        formate.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(new FileWriter("D:/xx.xml"), formate);
        writer.write(doc);
        
      writer.close();           
           
    dom4修改xml:           
     1  SAXReader reader = new  SAXReader();
    2  Document doc=reader.read(d:/xx.xml);
    3  获取根元素
       Element root=doc.getRootElement();
    4 查找我们要改的元素
      for(Iterator<Element> ite= root.elementIterator();ite.hasNext; ){
          Element ele= ite.next();
          if(ele.attributeValue("id").equlas(23))
          {
              ele.element("name").setText(新改的值);
          }
      }
   5  字符流 输出流xml        保存修改到文件中
        OutputFormate formate = new OutputFormate();
        formate.setEncoding("utf-8");
        XMLWriter writer = new XMLWriter(new FileWriter("D:/xx.xml"), formate);
        writer.write(doc);
        
      writer.close();                  
           
   xpath:查找xml信息
       让程序更有效的操作xml文件
  语法:
   //元素  
  //元素/子元素
  //@属性
  //元素[条件] 
   


     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值