【XML】详解XML

目录结构:

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

时间: 2024-10-24 12:58:26

【XML】详解XML的相关文章

Ant之build.xml详解

Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台的应用时,用样也是基于这些缺陷对Ant做了更好的设计. Ant 与 makefile Makefile有一些不足之处,比如

Tomcat主配置文件Server.xml详解

Tomcat主配置文件Server.xml详解 1.软件版本 [[email protected] META-INF]# java -version java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode) 2.server.xml组件类别 顶级组件:位于整个配置的

JavaEE学习之Maven配置文件pom.xml详解(转)

一.引言 (本文转载自:http://blog.csdn.net/longeremmy/article/details/9670619) 使用maven有一些时间了,一直没有好好将pom配置文件每个节点的意义好好了解一番.今天突然想来了解下:pom- project object model 项目对象模型.顾名思义,他是用来描述项目信息的,以及构建方式,依赖等.网上有一篇文章写的很详细,这里就借用一下,以备日后使用. 二.详解 1 <project xmlns="http://maven.

Web.xml详解(转)

这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首先简单说一下,web.xml的加载过程. 当我们去启动一个WEB项目时,容器包括(JBoss.Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来. l  启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: 

XStream 用法详解 XML 转换为 java 实体类

XStream 用法详解 java 类与 XML 互换 现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现. 我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输.接口调用的朋友有所帮助. 首先要导入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 两个包: 其次是预备一个 XML 事例 <config> <span styl

转载 logback的使用和logback.xml详解 http://www.cnblogs.com/warking/p/5710303.html

logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集

Android——TextView属性XML详解

Android_TextView属性XML详解 博客分类: android Java代码   属性名称    描述 android:autoLink    设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all) android:autoText    如果设置,将自动执行输入值的拼写纠正.此处无效果,在显示输入法并输入的时候起作用. android:bufferType  指定getText()方式取

SAX解析XML 详解

JAVA 解析 XML 通常有两种方式,DOM 和 SAX.DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用 DOM 的标准接口来操作这个树结构.但大部分情况下我们只对文档的部分内容感兴趣,根本就不用先解析整个文档,并且从节点树的根节点来索引一些我们需要的数据也是非常耗时的.     SAX是一种XML解析的替代方法.相比于文档对象模型DOM,SAX 是读

maven全局配置文件settings.xml详解

maven全局配置文件settings.xml详解 https://www.cnblogs.com/jingmoxukong/p/6050172.html?utm_source=gold_browser_extension 各种标签说明,没有<distributionManagement> 原文地址:https://www.cnblogs.com/stono/p/9456886.html

logback的使用和logback.xml详解,在Spring项目中使用log打印日志

logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集