XML文件详解

一丶XML简介

XML是一个可扩展的标记语言.(eXTENsible Markup language XML) 很类似于是HTML. HTML是有自己固定的标签,XML是自己定义的.XML主要作用是用来传输数据的, HTML主要用来显示数据的.所以XML不能替代HTML.

1.文档结构

XML是一个倒立的树形结构.

我们可以使用JAVA创建一个

文件(FILE) -> 新建 ->其它(other) 或者CTRL +N 出现以下界面.



我们选择XML file即可.

创建完毕之后的结果



下方有两种显示方式,第一种就是我们的表格形式,第二种就是源码形式.

第二种:



第一行代码,说明了 XML的文件头.

说明了XML的版本,以及编码.

最基本的XML代码

<?xml version="1.0" encoding="UTF-8"?>
<MyClient> <Client1>
<ClientId>1</ClientId>
<ClientName> tom</ClientName>
<age>12</age>
</Client1> <Client2>
<ClientId>2</ClientId>
<ClientName> Jason </ClientName>
<age>14</age>
</Client2> </MyClient>

首先有一个根节点,叫做 MyClient 写法是: 这个是根节点

根节点中有两个子节点. 每个子节点有自己各有的属性, 例如子节点 Client1 跟 Client2

下面就是属性了,属性我们可以给值,或者继续添加子节点.我们切换成列表模式查看.



所以可以看图表,可以得出,XML是一个数节点管理模式.

2.XML中的元素(Element)或者叫做标签(Tab).属性 文本内容. 节点(Node)

1.节点. 节点就是我们自己定义的根节点,如上面的定义的MyClient

2.元素跟标签,元素跟标签是我们自己定义的,比如我们的 MyClient Client1等可以说做标签.或者元素.

3.文本内容, 文本内容就是元素后面的内容,比如我们输入的 文本,如上面代码的 jason 12 等等都是

4.属性. 属性是放在元素里面了. 例如 后面的ID放到元素里面了并赋值,就是属性

如下,如果我们给了属性,那么列表视图就会改变.



可以看到,属性哪里已经有我们给的属性名称.以及颜色变成绿色. 后面跟着的1就是我们的属性值.

3.XML语法规则

上面我们编写了一个简单的XML文件.但是它也是有规则的.

1.必须有一个根元素才可以. 例如上面我们写的(MyClient)

2.文档必须有关闭标签,我们在编写XML的时候都有开始标签跟结束标签,例如 一个开始标签,一个结束标签.

3.标签大小写敏感, 开始标签的大小写.跟结束标签必须大小写一样.

4.结构必须正确的嵌套, 比如我们

<MyClient>
<Client1>
</MyClient>
</Client1>

这样就是错误的 必须正确的嵌套才可以. MyCliet开始标签在前边,那么最后也要是MyClient,一一对应的关系. 我们写的任何内容都是在他们之前.所以结束标签不会再中间的.

二丶XML文档解析

什么是XML解析,我们说过,XML是一个文本文档.只不过有一定的格式.是用来存储数据的.我们第一个标题中就写了一个简单的XML文件. 那么既然他是存储数据的,那么就要读取出来才可以.怎么进行读取,就是本标题所讲的XML解析.

JAVA中也提供了XML文档解析API. Android中也有.XML一般是配置信息的.或者在C/S结构中用来传输数据的.

javax.xml.parsers 中有解析XML的类

一个基于文档的 DOCumentBuilderFactory 一个是基于事件的. SAXparser类.

doc类是全部加载进去, SAX是逐行读取.

JAVA代码解析XML

1.首先编写一个简单的XML文件, 编写图书管理的XML文件


<?xml version="1.0" encoding="UTF-8"?>
<MyBooks> <Book>
<id>1001</id>
<name>Android</name>
<price>100</price>
</Book> <Book>
<id>1002</id>
<name>IOS</name>
<price>45.50</price>
</Book> <Book>
<id>1003</id>
<name>C++</name>
<price>56.7</price>
</Book> </<MyBooks>>

2.建立与之对象的类. 与元素相对应.

package com.xml;

public class BookOpt {

	private int id;
private String name;
private float price;
public BookOpt() {
// TODO 自动生成的构造函数存根
} }
Set Get方法自动生成即可.这里不贴代码了.

3.Doc代码解析XML文件

	public static void ParseWithDoument() throws Exception {
//1.doc解析
/*
解析思路:
1.使用Doc类进行解析,首先创建工厂对象
2.使用工厂对象创建DocBuider
3.使用DocumentBuilder的方法 parse(xml路径) 可以获得完整的XML文件内容
4.完成的XML文件内容使用Document进行接收
5.使用Document中的 getDocumentElement();可以获得XML的根节点
6.根节点的方法getElementsBytagName(子节点) 传入子节点可以获取子节点的所有内容
7.所有子节点使用NodeList进行接收存储.只需要进行遍历即可得出每个子节点的内容.
8.每一个节点是一个NODE类型.可以使用item(i)获取每一个节点
9.子节点中也有子节点,可以使用getChildNodes()获取子节点中所有节点,还是NodeList保存
10.使用节点中的 getNodeName()可以获取子节点的名称
11.通过判断子节点的名称来设置对应的值. 获取值使用 getFirseChild().getNodeValue();即可.
*/
public static void ParseWithDoument() throws Exception {
//1.doc解析
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//使用工厂类,创建一个factory
DocumentBuilder buider = factory.newDocumentBuilder(); //获得一个doc实例
Document doc = buider.parse("NewFile.xml"); //传入XML路径,返回解析后的Doc类.
NodeList Items = doc.getElementsByTagName("Book");//获取了所有BOOK节点
for(int i = 0; i < Items.getLength();i++) {
//获取子节点
Node nodes = Items.item(i); //要从子节点中继续获取节点
NodeList ChildNodes = nodes.getChildNodes(); //如果有子节点就是用这个
BookOpt Book = new BookOpt();
for(int j = 0; j < ChildNodes.getLength();j++) { Node ChildNode = ChildNodes.item(j);
String TagName = ChildNode.getNodeName();
//判断标签是哪个名字
if(TagName.equals("id")) {
String Id = ChildNode.getFirstChild().getNodeValue();
Book.setId(Integer.parseInt(Id));
}else if(TagName.equals("name")) {
String name = ChildNode.getFirstChild().getNodeValue();
Book.setName(name); }else if(TagName.equals("price")) { String Price = ChildNode.getFirstChild().getNodeValue();
Book.setPrice(Float.parseFloat(Price));
} }
System.out.println(Book); } } }

实现结果:



对于大文档,解析效率非常低.因为所有XML都读取到内存中.

掌握上面的方法其实掌握树形结构以及节点就可以.

三丶使用XPath定位信息

上面说的使用文档进行定位,我们还可以使用Java带了Xpath来定位.给一个路径就可以定位.

代码如下:

	private static void parseXpath()throws Exception {
// TODO 自动生成的方法存根
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse("NewFile.xml");
XPath path = XPathFactory.newInstance().newXPath(); String ePath = "/MyBooks/Book[1]/id";
System.out.println(path.evaluate(ePath, doc,XPathConstants.STRING));
}

1.首先创建DocumentBuilder对象.因为要获取完整的DocXML文档.都是使用工厂方法创建

2.使用XPath,xPath也是工厂创建

3.指定一个XML下面的路径. /根目录/子节点[xxx]/标签(元素); 这样就可以直接获得.

4.使用Xpath的方法 evaluate方法. 传入路径, 以及XML的内存.传入常量String代表返回的是Strign显示.

5.最后运行就可以直接获取了.

Java开发知识之XML文档使用,解析的更多相关文章

  1. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  2. Java用Xom生成XML文档

    这个总结源于Java编程思想第四版18.13节的案例: 完整代码地址: Java编程思想:XML 相关Api地址: Attribute Element Document Serializer 由于案例 ...

  3. xml文档的解析并通过工具类实现java实体类的映射:XML工具-XmlUtil

    若有疑问,可以联系我本人微信:Y1141100952 声明:本文章为原稿,转载必须说明 本文章地址,否则一旦发现,必追究法律责任 1:本文章显示通过 XML工具-XmlUtil工具实现解析soap报文 ...

  4. java: (正则表达式,XML文档,DOM和DOM4J解析方法)

    常见的XML解析技术: 1.DOM(基于XML树结构,比较耗资源,适用于多次访问XML): 2.SAX(基于事件,消耗资源小,适用于数量较大的XML): 3.JDOM(比DOM更快,JDOM仅使用具体 ...

  5. DOM生成XML文档与解析XML文档(JUNIT测试)

    package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...

  6. javaweb学习总结十三(dom4j方式对XML文档进行解析以及Xpath的使用)

    一:dom4j方式介绍 对于xml的解析总共有三种 1:jaxp方式,是sun公司开发的,分为sax方式和dom方式 2:jdom方式,后来其中部分人员参与开发dom4j 3:dom4j方式,是现在企 ...

  7. QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例

    0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...

  8. java中用jdom创建xml文档/将数据写入XML中

    import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; i ...

  9. XML文档的解析—dom4j

    XML为可扩展标记语言,它主要是用来保存数据,做配置文件,数据传输载体等.其实就是一个后缀名为.xml的文件. XML命名规则 名称可以含字母.数字以及其他的字符 名称不能以数字或者标点符号开始 名称 ...

随机推荐

  1. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

  2. myeclipse中的HTML页面在浏览器中显示为乱码

    myeclipse中的HTML页面在浏览器中显示为乱码 在通过myeclipse开发项目的过程中,如果用HTML页面书写前端,可能出现中文乱码现象,需要怎么解决呢?下面是我从网上搜的方法: 解决办法: ...

  3. wpa_supplicant 的编译

    1. wpa_supplicant的编译需要用到的3个源码包, 分别是wpa_supplicant, openssl, libnl wpa_supplicant的下载地址:http://w1.fi/r ...

  4. hanlp大辞典

    hanlp加一个很大的词典时候遇到的问题: ,然后改为5g,5g,问题得到解决. 但是运行后还有一个问题是: 重新改为10g,10g,问题得到解决. 也就是给java虚拟机分配的内存大点.

  5. Helm 入门指南

    Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端.Tiller服务端,Helm三个主要部件:Chart.仓库.Release: Chart:为Kubernetes ...

  6. DOM-基本概念及使用

    1.获取元素的方式总结 1.根据 id 的属性的值获取元素,返回值是一个元素对象 document.getElementById("id属性的值"); 2.根据标签名获取元素,返回 ...

  7. java内存分页计算

    介绍三个最常用的分页算法 First(感觉这个最简单实用) //总记录数int rows=21; //每页显示的记录数int pageSize=5; //页数int pageSum=(rows-1)/ ...

  8. ReactNative问题随记1 Exception in thread "main" java.lang.RuntimeException: gradle-2.14.1-all.zip

    ReactNative问题随记 想运行在真机上,在运行命令react-native run-android遇到错误如下: Scanning 559 folders for symlinks in D: ...

  9. Redis两种方式实现限流

    案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚本实现 private boolean accessLimit(String ip, int ...

  10. Java面试题整理:这些Java程序员面试中经常遇见的题目,必须掌握才能有好结果

    1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时 ...