xml文件使用及解析

简介: xml文件使用及解析

一、概述

1、介绍

Xml和html都是一种标记语言,但是xml是可扩展的标记语言,之所以是可扩展的,对于html所有的标记比如,<a>表示一个连接。都是有一定含义的,不能自己定义一些标签,但是xml就可以自定义一些标签。用于传输数据

<?xml version="1.0" encoding="UTF-8"?>

<!--上面一句是xml文档说明 必须放在第一行-->

<!--每一个xml都有一个根标签包含子标签 并且却分大小写-->

<goodlist>

   <!--每个子标签有自己的属性 比如id属性-->

   <good id="111">

       <name>apple</name>

       <place>beijing</place>

   </good>

   <good>

       <name>banana</name>

       <place>shanghei</place>

   </good>

</goodlist>

2、特点

XML有几个特点:一是纯文本,默认使用UTF-8编码,二是可嵌套,适合表示结构化数据。如果把XML内容存为文件,那么它就是一个XML文件

3、结构

XML有固定的结构,首行必定是<?xml version="1.0"?>,可以加上可选的编码。紧接着,如果以类似<!DOCTYPE note SYSTEM "book.dtd">声明的是文档定义类型(DTD:Document Type Definition),DTD是可选的。接下来是XML的文档内容,一个XML文档有且仅有一个根元素,根元素可以包含任意个子元素,元素可以包含属性,例如,<isbn lang="CN">1234567</isbn>包含一个属性lang="CN",且元素必须正确嵌套。如果是空元素,可以用<tag/>表示。

由于使用了<>以及引号等标识符,如果内容出现了特殊符号,需要使用&???;表示转义。例如,Java<tm>必须写成:

<name>Java&lt;tm&gt;</name>

常见的特殊字符如下:

字符 表示
< &lt;
> &gt;
& &amp;
" &quot;
' &apos;

格式正确的XML(Well Formed)是指XML的格式是正确的,可以被解析器正常读取。而合法的XML是指,不但XML格式正确,而且它的数据结构可以被DTD或者XSD验证。

DTD文档可以指定一系列规则,例如:

  • 根元素必须是book
  • book元素必须包含nameauthor等指定元素
  • isbn元素必须包含属性lang
  • ...

如何验证XML文件的正确性呢?最简单的方式是通过浏览器验证。可以直接把XML文件拖拽到浏览器窗口,如果格式错误,浏览器会报错。

和结构类似的HTML不同,浏览器对HTML有一定的“容错性”,缺少关闭标签也可以被解析,但XML要求严格的格式,任何没有正确嵌套的标签都会导致错误。

XML是一个技术体系,除了我们经常用到的XML文档本身外,XML还支持:

  • DTD和XSD:验证XML结构和数据是否有效;
  • Namespace:XML节点和属性的名字空间;
  • XSLT:把XML转化为另一种文本;
  • XPath:一种XML节点查询语言;
  • ...

实际上,XML的这些相关技术实现起来非常复杂,在实际应用中很少用到,通常了解一下就可以了。

二、约束文件

平时编写的xml文件,没有固定的规则,标签名 属性名 属性值可以随意定义,但是如果想让别人在使用自己xml文件的使用,不能随意定义相关标签,就要在这个xml文件中加入约束文件,常见的约束文件有两DTD(文件名后缀是dtd)和schema(文件名后缀是xsd)两种,相比较而言,schema约束文件更加高级全面。DTD约束和schema约束(干的是同样的事情 只不过功能强大不同)

位置

内部dtd

外部dtd

三、解析

概述

1. JAXP:sun公司提供的解析器,支持dom和sax两种思想

2. DOM4J:一款非常优秀的解析器

3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

4. PULL:Android操作系统内置的解析器,sax方式的。

DOM4J解析

方式是dom方式,把xml文件加载到内存中形成一个dom树

并得到一个document对象。可以使用dom4j进行dom方式的解析

将Dom4j的jar包放在工程根目录当中创建一个文件夹为lib(javase工程);web工程直接放到WEB-INF中的lib文件

也可以使用dom4j生成xml文件

或者

结果

jsoup 解析

概述

是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

* 步骤:

     1. 导入jar包

     2. 获取Document对象

     3. 获取对应的标签Element对象

     4. 获取数据

案例代码

//获取student.xml的path

       String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();

       //解析xml文档,加载文档进内存,获取dom树--->Document

       Document document = Jsoup.parse(new File(path), "utf-8");

       //获取元素对象 Element

       Elements elements = document.getElementsByTag("name");


       System.out.println(elements.size());

       //获取第一个name的Element对象

       Element element = elements.get(0);

       //获取数据

       String name = element.text();

       System.out.println(name);

使用文档

1. Jsoup:工具类,可以解析html或xml文档,返回Document

* parse:解析html或xml文档,返回Document

* parse(File in, String charsetName):解析xml或html文件的。

* parse(String html):解析xml或html字符串

* parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象

2. Document:文档对象。代表内存中的dom树

* 获取Element对象

* getElementById(String id):根据id属性值获取唯一的element对象

* getElementsByTag(String tagName):根据标签名称获取元素对象集合

* getElementsByAttribute(String key):根据属性名称获取元素对象集合

* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合

3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用

4. Element:元素对象

获取子元素对象

* getElementById(String id):根据id属性值获取唯一的element对象

* getElementsByTag(String tagName):根据标签名称获取元素对象集合

* getElementsByAttribute(String key):根据属性名称获取元素对象集合

* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合

获取属性值

* String attr(String key):根据属性名称获取属性值

获取文本内容

* String text():获取文本内容

* String html():获取标签体的所有内容(包括字标签的字符串内容)

5. Node:节点对象

* 是Document和Element的父类

*6.快捷查询方式

selector:选择器

* 使用的方法:Elements   select(String cssQuery)

* 语法:参考Selector类中定义的语法

XPathXPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言

* 使用Jsoup的Xpath需要额外导入jar包。

* 查询w3cshool参考手册,使用xpath的语法完成查询

* 代码:

//1.获取student.xml的path

String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();

//2.获取Document对象

Document document = Jsoup.parse(new File(path), "utf-8");

//3.根据document对象,创建JXDocument对象

JXDocument jxDocument = new JXDocument(document);

结合xpath语法查询

//查询所有student标签
List<JXNode> jxNodes = jxDocument.selN("//student");
    for (JXNode jxNode : jxNodes) {
    System.out.println(jxNode);
    }
    System.out.println("--------------------");
 
//查询所有student标签下的name标签
    List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
        for (JXNode jxNode : jxNodes2) {
        System.out.println(jxNode);
        }
        System.out.println("--------------------");
 
//查询student标签下带有id属性的name标签
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
            for (JXNode jxNode : jxNodes3) {
            System.out.println(jxNode);
            }
            System.out.println("--------------------");
 
//查询student标签下带有id属性的name标签 并且id属性值为itcast
            List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']");
                for (JXNode jxNode : jxNodes4) {
                System.out.println(jxNode);
                }

更多jsoup参考文章

Jsoup-CSDN博客

Jackson解析

如果能直接从XML文档解析成一个JavaBean,那比DOM或者SAX不知道容易到哪里去了。

幸运的是,一个名叫Jackson的开源的第三方库可以轻松做到XML到JavaBean的转换。我们要使用Jackson,先添加两个Maven的依赖:

  • com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.10.1
  • org.codehaus.woodstox:woodstox-core-asl:4.4.1

然后,定义好JavaBean,就可以用下面几行代码解析:

InputStream input = Main.class.getResourceAsStream("/book.xml");
JacksonXmlModule module = new JacksonXmlModule();
XmlMapper mapper = new XmlMapper(module);
Book book = mapper.readValue(input, Book.class);
System.out.println(book.id);
System.out.println(book.name);
System.out.println(book.author);
System.out.println(book.isbn);
System.out.println(book.tags);
System.out.println(book.pubDate);

注意到XmlMapper就是我们需要创建的核心对象,可以用readValue(InputStream, Class)直接读取XML并返回一个JavaBean。运行上述代码,就可以直接从Book对象中拿到数据:

1
Java核心技术
Cay S. Horstmann
1234567
[Java, Network]
null

如果要解析的数据格式不是Jackson内置的标准格式,那么需要编写一点额外的扩展来告诉Jackson如何自定义解析


相关文章
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置的XML解析器将XML转换为XML DOM,便于JavaScript操作。通过XMLHttpRequest加载XML文档,如`books.xml`,创建HTTP请求并获取响应,将响应转化为DOM对象。示例展示了在不同浏览器中创建XMLHttpRequest对象并加载XML的过程。
|
1天前
|
XML 数据格式
XML Schema 复杂元素类型详解:定义及示例解析
在XML Schema(XSD)中,复杂元素包含其他元素和/或属性,分为4类:空元素、仅含元素、仅含文本和既含元素也含文本。定义复杂元素可通过直接声明或引用预定义的复杂类型。复杂空元素仅含属性,而仅含元素的类型则只包含其他子元素。XSD提供了`&lt;xs:sequence&gt;`、`&lt;xs:all&gt;`、`&lt;xs:choice&gt;`等指示器来规定元素顺序和出现次数,以及`&lt;xs:attributeGroup&gt;`和`&lt;xs:group&gt;`来组织元素和属性。
124 7
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置的XML解析器将XML转换为JavaScript可操作的DOM对象。通过XMLHttpRequest加载XML文档,如`books.xml`,创建HTTP请求并获取响应,然后将响应解析为XML DOM,以便用JavaScript访问和处理。示例代码展示了在不同浏览器中如何使用XMLHttpRequest加载XML。
|
4天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器将XML转换为JavaScript可操作的DOM对象,使得浏览器(大多内置此解析器)能读取和处理XML。通过XMLHttpRequest对象,可以加载XML文档,如示例所示,创建HTTP请求获取&quot;books.xml&quot;,然后将响应转化为DOM对象以进行访问和操作。
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
浏览器内置XML解析器,用于读取和操作XML。它将XML转化为XML DOM,允许JavaScript访问、修改节点。以下JS代码示例加载&quot;books.xml&quot;到DOM对象:检查浏览器支持,创建XMLHttpRequest或ActiveXObject,打开GET请求,发送并获取响应,将响应转换为XML DOM。
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器是浏览器内置的工具,用于将XML转换为JavaScript可操作的XML DOM对象。这个DOM包含遍历、修改XML节点的函数。首先,XML文档需加载到DOM中,通过XMLHttpRequest对象实现,如示例所示:根据浏览器类型创建XMLHTTP对象,打开并发送GET请求到服务器获取&quot;books.xml&quot;,然后将响应转化为DOM对象。
|
5天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
25 0
|
5天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
42 0
|
5天前
|
SQL
Mybatis.xml文件中大于小于等于
Mybatis.xml文件中大于小于等于
12 0

推荐镜像

更多