• XML


    目录结构:

    contents structure [-]

    1 什么是XML

    XML(eXtensible  markup language) 是一种可扩展的标记语言 ,即使可以自定义标签的语言。

    2 解析XML

    2.1 解析的两种方式

    XML的解析分为两种方式,分别是SAX和DOM。

    DOM:(Document Object Model,就是文档对象模型),是W3C组织推荐的处理XML的一种方式。使用该方式解析XML文档,会把文档中的所有元素,按照其出现的层次关系,在内存中构造出树形结构。因此对内存的压力大,解析熟读慢,优点就是可以遍历和修改节点的内容。

    SAX:(Simple API for XML) 是一种XML解析的替代方法。相比较于DOM,解析速度更快,内存的压力更小;缺点就是不能修改节点的内容。

    2.2 使用dom4j解析XML

    在使用dom4j解析XML之前需要导入相关的工具包,比如笔者的: dom4j-1.6.1.jar 包

    2.2.1 dom4j的API

    复制代码
    //创建SAXReader,是dom4j包提供的解析器
    SAXReader reader=new SAXReader();
    //读取指定的文件
    Document doc=reader.read(new File(filename));
    
    Document
      Document getRootElement()           用于获取根元素
    
    Element
      Element element(String name)        获取元素下指定名称的子元素
      List<Element> elements()            获取元素下所有的子元素
      String getName()                    获取元素名
      String getText()                    获取元素文本内容
      String elementText(String name)     获取子元素文本内容
      Attribute attribute(String)         获取元素的属性
      String attributeValue(String name)  获取元素的属性值
    
    Attribute
      String getName()                    获取属性的名字
      String getValue()                   获取属性的值
    复制代码

    2.2.2 打印一个XML文件的全部内容

    pricties.xml文件直接位于项目下

    复制代码
    <?xml version="1.0" encoding="utf-8" ?>
    <books id="a">
      <book id="b">
        <name id="c_1" name="c_2">三国演绎</name>
        <author id="d_1" name="d_2" >罗贯中</author>
        <price id="e">58.8</price>
      </book>
      <book id="f_1" name="f_2">
        <name id="g">水浒传</name>
        <author id="h">施耐庵</author>
        <price id="i">49.8</price>
      </book>
      <book id="j_1" name="j_2">
        <name id="k">西游记</name>
        <author id="l">吴承恩</author>
        <price id="m">100.1</price>
        <order>1</order>
      </book>
    </books>
    复制代码
    复制代码
    import java.io.File;
    import java.util.List;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class ParseXML {
    
        public static void main(String[] args) {
            //创建SAXReader对象
            SAXReader saxr=new SAXReader();
            Document  docu=null;
            try{
                //读取指定的文件,相对于项目路径
                docu=saxr.read(new File("pricties.xml"));
                //获得元素的文件的根节点
                Element e=docu.getRootElement();
                
                searchAllElement(e);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        
        public static void searchAllElement(Element e){
            //获得当前元素下的所有子元素,并存储到集合中
            List<Element> elements=e.elements();
            
            System.out.print("<"+e.getName());//打印开始标记
            List<Attribute> atrs=e.attributes();//打印该标记下的所有属性
            for(Attribute att:atrs){
                System.out.print(" "+att.getName()+"=""+att.getValue()+""");
            }
            System.out.println(">");
            
            //如果集合的大小为0,表示该集合下没有子元素了
            if(elements.size()==0){
                System.out.println(e.getText());//打印文本信息
                System.out.println("</"+e.getName()+">");//打印结束标记
                return;//退出当前层方法
            }
            
            //递归每一个子元素
            for(Element ele:elements){
                searchAllElement(ele);
            }
            System.out.println("</"+e.getName()+">");//打印结束标记
        }
    
    }
    复制代码

    2.3 在dom4j中应用XPath解析XML

    首先需要在dom4j基础上引入相应的jar包,比如读者的: jaxen-1.1-beta-6.jar 

    2.3.1 XPath的API

    Document
      List<Node> selectNodes(String xpath)
      Node selectSingleNode(String xpath)

    2.3.2 XPath的路径表达式

    2.3.2.1 XPath的路径表达式规则

    2.3.2.2 XPath的路径表达式应用案例

    2.3.3 通配符

    2.3.3.1 通配符规则

    2.3.3.2 通配符应用案例

    2.3.4 谓语

    2.3.4.1 谓语规则

    谓语是用来查找某个特定的节点或是包含某个指定的值的节点
    谓语被嵌在方括号中

    2.3.4.2 谓语应用案例

    3 java写XML文件

    3.1 将一个带有书籍信息的List集合解析为XML文件

    复制代码
    package com.xdl.xml;
    
    public class Book {
        private String name;
        private String author;
        private String price;
        public Book() {
            super();
        }
        public Book(String name, String author, String price) {
            super();
            setName(name);
            setAuthor(author);
            setPrice(price);
        }
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
        /**
         * @param name the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
        /**
         * @return the author
         */
        public String getAuthor() {
            return author;
        }
        /**
         * @param author the author to set
         */
        public void setAuthor(String author) {
            this.author = author;
        }
        /**
         * @return the price
         */
        public String getPrice() {
            return price;
        }
        /**
         * @param price the price to set
         */
        public void setPrice(String price) {
            this.price = price;
        }
    }
    复制代码
    复制代码
    package com.xdl.xml;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.XMLWriter;
    
    public class WriteXML {
    
        public static void main(String[] args) {
            //创建一个Book集合用于存储书籍信息
            List<Book> list_books=new ArrayList<Book>();
            //插入书籍信息
            for(int i=0;i<6;i++){
                Book book=new Book("jame"+i,"author"+i,""+i);
                list_books.add(book);
            }
            
            //创建一个文档对象
            Document doc=DocumentHelper.createDocument();
            //创建一个根节点
            Element books=DocumentHelper.createElement("books");
            
            //获得书籍集合的大小
            int size=list_books.size();
            for(int i=0;i<size;i++){
                //创建一个book节点
                Element book=books.addElement("book");
                //创建一个name节点
                Element name=book.addElement("name");
                //创建一个author节点
                Element author=book.addElement("author");
                //创建一个price节点
                Element price=book.addElement("price");
                name.setText(list_books.get(i).getName());
                author.setText(list_books.get(i).getAuthor());
                price.setText(list_books.get(i).getPrice());
            }
            //设置文档根节点
            doc.setRootElement(books);
            
            try {
                //如果文件不存在,会自动创建
                FileOutputStream   fos = 
                        new FileOutputStream(new File("books.xml"));
                XMLWriter  xmlw = new XMLWriter(fos);
                xmlw.write(doc);
                xmlw.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    SpringMVC初识视图解析器
    初识SpringMVC
    C++ 虚函数表
    C++ 纯虚函数 + 抽象类
    C++ 虚析构函数
    C++ 虚函数
    C++ 多态
    leetcode
    leetcode
    leetcode 10.正则表达式匹配
  • 原文地址:https://www.cnblogs.com/joke0406/p/6944723.html
Copyright © 2020-2023  润新知