您的位置:首页 > 编程语言 > Java开发

(A4,二)java数据交换格式---Xml详解

2017-12-21 15:22 369 查看

java数据交换格式—Xml详解

Xml简单使用

什么是XML?

它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。

XML 主要用于描述数据和用作配置文件。

XML 文档在逻辑上主要由一下 5 个部分组成:

XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息

文档类型声明:指出 XML 文档所用的 DTD

元素:由开始标签、元素内容和结束标签构成

注释:以结束,用于对文档中的内容起一个说明作用

处理指令:通过处理指令来通知其他应用程序来处理非 XML 格式的数据

XML 文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等作为文档实体的子节点,根元素本身和其内部的子元素也是一棵树。

Xml样例

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student1 id="001">
<微信公众号>@残缺的孤独</微信公众号>
<学号>20140101</学号>
<地址>北京海淀区</地址>
<座右铭>要么强大,要么听话</座右铭>
</student1>
<student2 id="002">
<新浪微博>@残缺的孤独</新浪微博>
<学号>20140102</学号>
<地址>北京朝阳区</地址>
<座右铭>在哭泣中学会坚强</座右铭>
</student2>
</students>


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


xml文件头部,说明了xml的版本和编码,utf-8一般是网络传输用的编码

XML解析方式

Dom4j、Sax、Pull

Dom4j与Sax区别

dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出;

sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml;

也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。

使用dom4j解析xml

解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,获取Document对象有三种方式:

1.自己创建Document对象

Document document = DocumentHelper.createDocument();
//其中students是根节点,可以继续添加其他节点等操作。
Element root = document.addElement("students");


2.创建SAXReader对象,通过读取文件转换成Document对象

// 创建SAXReader对象
SAXReader reader = new SAXReader();
// 读取文件 转换成Document
Document document = reader.read(new File("XXXX.xml"));


3.读取XML文本内容获取Document对象

String xmlStr = "<students>......</students>";
Document document = DocumentHelper.parseText(xmlStr);


解析xml代码

Xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student1 id="001">
<微信公众号>@残缺的孤独</微信公众号>
<学号>20140101</学号>
<地址>北京海淀区</地址>
<座右铭>要么强大,要么听话</座右铭>
</student1>
<student2 id="002">
<新浪微博>@残缺的孤独</新浪微博>
<学号>20140102</学号>
<地址>北京朝阳区</地址>
<座右铭>在哭泣中学会坚强</座右铭>
</student2>
</students>


Java代码:

public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
Document read= saxReader.read(new File("D:\\EclipseNeon.3\\workspace\\JsonProject\\src\\main\\resources\\document.xml"));
// 获取根节点
Element rootElement = read.getRootElement();
getNodes(rootElement);

}

static public void getNodes(Element rootElement) {
System.out.println("当前节点名称:" + rootElement.getName());
// 获取属性ID
List<Attribute> attributes = rootElement.attributes();
for (Attribute attribute : attributes) {
System.out.println("属性:" + attribute.getName() + "---" + attribute.getText());
}
if (!rootElement.getTextTrim().equals("")) {
System.out.println(rootElement.getName() + "--" + rootElement.getText());
}
// 使用迭代器遍历
Iterator<Element> elementIterator = rootElement.elementIterator();
while (elementIterator.hasNext()) {
Element next = elementIterator.next();
getNodes(next);
}

}


运行结果:



注意:

this.getClass().getClassLoader().getResourceAsStream(xmlPath)

获取当前项目路径xmlfsfs

XML与JSON区别

Xml是重量级数据交换格式,占宽带比较大。

JSON是轻量级交换格式,xml占宽带小。

很多互联网公司都会使用json作为数据交换格式。

很多银行项目,大多数还是在使用xml。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: