zoukankan      html  css  js  c++  java
  • DOM4j 操作XML

    <?xml version="1.0" encoding="GBK"?>  
    <persons>
        <men>
            <person id = "20111907">潘腾</person>
            <person id = "20111901">雷帅</person>
        </men>
        <women>
            <person id = "20111908">杨悦</person>
            <person id = "20111908">张东月</person>
        </women>
    </persons>
    import java.io.*;
    import java.io.File;
    import java.io.FileOutputStream;  
    import java.io.FileWriter;  
    import org.dom4j.*;
    import org.dom4j.io.*;
    import java.util.*;
    import org.jaxen.*;
    public class DOM_XML {
        public static void main(String[] args)
        {
            try
            {
    //            read_xml1();
    //            read_xml2();
    //            read_xml3();
    //            read_xml4();
    //            creatXml();
                modifyXML();
            }
            catch(Exception e)
            {
                System.out.println("错误信息:" + e);
            }
        }
        
        /**
         * 第一种方式 使用迭代器读XML
         */
        public static void read_xml1()
        {
            try
            {
                SAXReader reader = new SAXReader();                        //解析器
                Document doc = reader.read(new File("persons.xml"));    //文档对象
                Element root = doc.getRootElement();                    //获取根元素  <persons>
                Iterator it = root.elementIterator();                    //<men>   <women>
                while(it.hasNext())
                {
                    Element ele = (Element)it.next();
                    Iterator sec_it = ele.elementIterator();
                    while(sec_it.hasNext())
                    {
                        Element man = (Element)sec_it.next();      //不调用next方法,就不会下移  便会产生死循环
                        String name = man.getName();    
                        String attr = man.attributeValue("id");
                        String content = man.getText();
                        System.out.println("name:" + name + "
    id: " + attr + "
    Content: " + content);
                    }
                }
            }
            catch(Exception e)
            {
                
            }
        }
        
        /**
         * 第二种方式 elements
         */
        public static void read_xml2()
        {
            try
            {
                SAXReader reader = new SAXReader();                        //解析器
                Document doc = reader.read(new File("persons.xml"));    //文档对象
                Element root = doc.getRootElement();                    //获取根元素  <persons>
                List<Element> listEle = root.elements("men");            //获取root下的所有men元素
                 List<Element> listMen = listEle.get(0).elements("person");        //获取men下的所有person元素
                 for(Element element_obj:listMen)
                 {
                    String name = element_obj.getName();    
                    String attr = element_obj.attributeValue("id");
                    String content = element_obj.getText();
                    System.out.println("name:" + name + "
    id: " + attr + "
    Content: " + content);
                 }
            }
            catch(Exception e)
            {
                
            }
        }
        
        /**
         * 第三种方式  使用适配器  这个暂时没有搞懂
         */
        public static void read_xml3()
        {
            try
            {
                SAXReader reader = new SAXReader();                        //解析器
                Document doc = reader.read(new File("persons.xml"));    //文档对象
                Element root = doc.getRootElement();                    //获取根元素  <persons>
                 
                 //第三种方式 适配器
                 doc.accept(new VisitorSupport() {//使用观察器的子类,来完成对xml文件的读取。
                       
                       public void visit(Element el) {//利用观察期进行xml的读取。
                        
                        System.out.println(el.getName()+": "+el.getText());
                       }
                       
                      });
            }
            catch(Exception e)
            {
                
            }
            
        }
        
        /**
         * 第四种方式 selectNodes
         * selectNodes的参数是元素路径  需要学习XPath相关知识
         */
        public static void read_xml4()
        {
            try
            {
                SAXReader reader = new SAXReader();                        //解析器
                Document doc = reader.read(new File("persons.xml"));    //文档对象
                Element root = doc.getRootElement();                    //获取根元素  <persons>
                 
        
                //第四种 使用selectNodes读取XML
                //需要导入 org.jaxen.* 包   否则会报错
                List list = doc.selectNodes("//persons/men/person");//使用selectNodes获取所要查询xml的节点。
                 for(Object obj:list){//遍历节点,获取节点内数据。                   
                       Element el = (Element)obj;
                       System.out.println(el.getText());
                      }
            }
            catch(Exception e)
            {}
        }
    
        /**
         * 创建XML文件 
         * XML文件第一行 encoding值为UTF-8   这是错误的
         * java 在windows 中文版环境下 默认采用的是GBK,所以需要手动更改
         */
        public static void creatXml()
        {
            try
            {
                Document newdoc = DocumentHelper.createDocument();
                Element persons = newdoc.addElement("persons");
                Element men = persons.addElement("men");
                Element person1 = men.addElement("person");
                person1.addAttribute("id", "20111907");
                person1.setText("panteng");
                Element person2 = men.addElement("person");
                person2.addAttribute("id", "20111901");
                person2.setText("leishuai");
                
                File newxml = new File("newFile.xml");
                if(newxml.exists())
                {
                    newxml.delete();
                }
                newxml.createNewFile();    //创建文件
                XMLWriter out = new XMLWriter(new FileWriter(newxml));
                out.write(newdoc);
                out.flush();
                out.close();
                System.out.println("文件创建完毕");
            }
            catch(Exception e)
            {
                
            }
        }
    
        /**
         * 修改XML   删除节点、修改 添加属性
         */
        public static void modifyXML()
        {
            try
            {
                SAXReader reader = new SAXReader();                        //解析器
                Document doc = reader.read(new File("persons.xml"));    //文档对象
                Element root = doc.getRootElement();                    //获取根元素  <persons>
                Element men = root.element("men");
                //删除雷帅的记录元素
                Iterator it = men.elementIterator();
                while(it.hasNext())
                {
                    Element ele = (Element)it.next();
                    if(ele.getText().equals("雷帅"))
                    {
                        men.remove(ele);
                    }
                }
                //增加伟男记录
                Element weiNan = men.addElement("person");
                weiNan.setText("伟男");
                
                //修改 潘腾的id 并增加age属性
                Iterator it2 = men.elementIterator();
                while(it2.hasNext())
                {
                    Element ele = (Element)it2.next();
                    if(ele.getText().equals("潘腾"))
                    {
                        ele.setAttributeValue("id", "080635");
                        ele.addAttribute("age", "23");
                    }
                }
                
                File newxml = new File("newFile.xml");
                if(newxml.exists())
                {
                    newxml.delete();
                }
                newxml.createNewFile();    //创建文件
                XMLWriter out = new XMLWriter(new FileWriter(newxml));
                out.write(doc);
                out.flush();
                out.close();
                System.out.println("文件更新完毕");
            }
            catch(Exception e)
            {
                System.out.println("错误信息:" + e);
            }
    
        }
    }

    不难看出,JAVA  对xml的修改,实际上是修改了doc对象,然后删除原来的文件,将这个对象 重新写入一个文件,文件名和原先的相同。

    利用XSD对XML进行验证:

    import javax.xml.transform.Source; 
    import javax.xml.transform.stream.StreamSource; 
    import javax.xml.validation.Schema; 
    import javax.xml.validation.SchemaFactory; 
    import javax.xml.validation.Validator;
    import org.xml.sax.SAXException;
    import org.dom4j.util.XMLErrorHandler;
    
    /**
         * 基于XSD验证XML
         */
        public static void validateXMLByXSD(String XMLpath,String XSDpath) 
        {
            try
            {
                //建立schema工厂
               SchemaFactory schemaFactory=SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
               //建立验证文档文件对象,利用此文件对象所封装的文件进行schema验证
               File schemaFile=new File(XSDpath);
               //利用schema工厂,接收验证文档文件对象生成Schema对象
               Schema schema=schemaFactory.newSchema(schemaFile);
               //通过Schema产生针对于此Schema的验证器,利用schenaFile进行验证
               Validator validator=schema.newValidator();
               //得到验证的数据源
               Source source=new StreamSource(XMLpath);
               XMLErrorHandler errorHandler = new XMLErrorHandler();
               //开始验证,成功输出success!!!,失败输出fail
               try{
                   validator.setErrorHandler(errorHandler);
                   validator.validate(source); 
                
               }catch(Exception ex){
                ex.printStackTrace(); 
               }
               
               if(errorHandler.getErrors().hasContent())
               {
                   System.out.println("验证失败" + errorHandler.getErrors());
               }
               else
               {
                   System.out.println("验证成功");
               }
            }
            catch(Exception e)
            {
                System.out.println("错误信息:" + e);
            }
        }
    基于XSD对XML进行验证
  • 相关阅读:
    tftp服务、串口工具minicom
    意外的“黄金点”
    软件工程实践总结
    关于 K米 —— 的案例分析
    关于git的学习
    第二次作业_需求分析与原型设计
    安装appium
    淘宝
    Selenium API基础 8种定位
    selenium
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/4832624.html
Copyright © 2011-2022 走看看