首页 > 代码库 > 【XML】详解XML

【XML】详解XML

目录结构:

<script type="text/javascript">// </script>

contents structure [-]
  1. 什么是XML
  2. 解析XML
    1. 解析XML的两种方式
    2. 使用dom4j解析xml
      1. dom4j的部分API
      2. 打印一个XML文件的全部内容
    3. 在dom4j中应用XPath解析XML
      1. 相关的部分API
      2. XPath的路径表达式
      3. 通配符
      4. 谓语
  3. 使用java写一个XMl文件
    1. 将一个带有书籍信息的List集合解析为XML文件

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>
pricties.xml
技术分享
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()+">");//打印结束标记    }}
parseXML.xml

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;    }}
Book.java
技术分享
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();        }    }}
WriteXML.java

 

【XML】详解XML