XML解析

  xml文件除了给开发者看,更多的情况使用程序读取xml文件的内容。这叫做xml解析

XML解析方式(原理不同) 

  DOM解析

  SAX解析

XML解析工具

  DOM解析原理:

   JAXP (oracle-Sun公司官方)

    JDOM工具(非官方)

    Dom4J工具(非官方)

     三大框架(默认读取xml的工具就是Dom4j)

      .......

  SAX解析原理:

     sax解析工具(oracle-sun公司官方)

什么是DOM解析

  DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

  Dom4j工具

  非官方,不在jdk中。

使用步骤:

导入dom4j的核心包。 dom4j-1.6.1.jar

编写Dom4j读取xml文件代码

被读取文件

<?xml version="1.0" encoding="utf-8"?>
<contactList>
<contact id="001">
<name>张三</name>
<age>20</age>
<phone>134222223333</phone>
<email>zhangsan@qq.com</email>
<qq>432221111</qq>
</contact>
<contact id="002">
<name>lisi</name>
<age>20</age>
<phone>134222225555</phone>
<email>lisi@qq.com</email>
<qq>432222222</qq>
</contact>
</contactList>
//编写文件读取
import java.io.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader; public class Dom4j_read {
public static void main(String[] args) {
try {
//1.创建一个xml解析器对象
SAXReader reader = new SAXReader();
//2.读取xml文档,返回Document对象
Document doc = reader.read(new File(".\\src\\contact.xml"));
System.out.println(doc);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException();
}
}
}

无法将所有标签读取,使用迭代和递归就可以

import java.io.File;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test; public class Demo1 {
/*@Test
public void test1() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));
//nodeIterator: 得到当前节点下的所有子节点对象(不包含孙以下的节点)
Iterator<Node> it = doc.nodeIterator();
while(it.hasNext()) {
Node node = it.next();
String name = node.getName();
System.out.println(name); //继续取出其下面的子节点
//只有标签节点才有子节点
//判断当前节点是否是标签节点
if(node instanceof Element) {
Element elem = (Element)node;
Iterator<Node> it1 = elem.nodeIterator();
while(it1.hasNext()) {
Node node1 = it1.next();
System.out.println(node1.getName());
}
}
}
}*/
@Test
public void test2() throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));
Element rootelem = doc.getRootElement();
getChildNode(rootelem); } private void getChildNode(Element elem) {
System.out.println(elem.getName());
Iterator<Node> it = elem.nodeIterator();
while(it.hasNext()) {
Node node = it.next();
if(node instanceof Element){
Element el = (Element)node;
getChildNode(el);
}
}
}
}

Domj4读取xml文件

节点:Iterator  Element.nodeIterator();  //获取当前标签节点下的所有子节点

标签:

Element  Document.getRootElement();  //获取xml文档的根标签

Element   ELement.element("标签名") //指定名称的第一个子标签

Iterator<Element> Element.elementIterator("标签名");// 指定名称的所有子标签

List<Element> Element.elements(); //获取所有子标签

@Test//获取标签
public void text3() throws Exception {
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml")); //2.得到根标签,得到标签名称
Element rootelem = doc.getRootElement();
String name = rootelem.getName();
System.out.println(name); //3.得到当前标签下指定名称的第一个子标签
/*Element contactelem = rootelem.element("contact");
System.out.println(contactelem.getName());*/ /*//4.得到当前标签下指定名称的所有子标签
Iterator<Element> it = rootelem.elementIterator("contact");
while(it.hasNext()){
Element elem = it.next();
System.out.println(elem.getName());
}*/
//5.得到当前标签下的的所有子标签
List<Element> list = rootelem.elements();
for(int i=0;i<list.size();i++){
Element e = list.get(i);
System.out.println(e.getName());
}
for(Element e:list){
System.out.println(e.getName());
} Iterator<Element> it = list.iterator();
while(it.hasNext()){
Element elem = it.next();
System.out.println(elem.getName());
}
}

属性:

String   Element.attributeValue("属性名") //获取指定名称的属性值

Attribute    Element.attribute("属性名");//获取指定名称的属性对象

Attribute.getName()  //获取属性名称

Attibute.getValue()  //获取属性值

List<Attribute>         Element.attributes();  //获取所有属性对象

Iterator<Attribute>          Element.attibuteIterator(); //获取所有属性对象

@Test//获取属性
public void test4() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml")); //获取属性:(先获的属性所在的标签对象,然后才能获取属性)
//1.得到标签对象
Element contactElem = doc.getRootElement().element("contact");
//2.得到属性
//2.1 得到指定名称的属性值 String idValue = contactElem.attributeValue("id");
System.out.println(idValue); //2.2 得到指定属性名称的属性对象
Attribute idAttr = contactElem.attribute("id");
//getName: 属性名称 getValue:属性值
System.out.println(idAttr.getName() +"=" + idAttr.getValue()); //2.3 得到所有属性对象,返回LIst集合
List<Attribute> list = contactElem.attributes();
//遍历属性
for (Attribute attr : list) {
System.out.println(attr.getName()+"="+attr.getValue());
} //2.4 得到所有属性对象,返回迭代器
Iterator<Attribute> it = contactElem.attributeIterator();
while(it.hasNext()){
Attribute attr = it.next();
System.out.println(attr.getName()+"="+attr.getValue());
}
}

文本:

Element.getText();  //获取当前标签的文本

Element.elementText("标签名") //获取当前标签的指定名称的子标签的文本内容

@Test//获取文本
public void test5() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml")); //注意: 空格和换行也是xml的内容
String content = doc.getRootElement().getText();
System.out.println(content); //获取文本(先获取标签,再获取标签上的文本)
Element nameELem =
doc.getRootElement().element("contact").element("name");
//1. 得到文本
String text = nameELem.getText();
System.out.println(text); //2. 得到指定子标签名的文本内容
String text2 =
doc.getRootElement().element("contact").elementText("phone");
System.out.println(text2); }

Day 25:XML解析的更多相关文章

  1. 【Cocos2d-x游戏引擎开发笔记(25)】XML解析

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...

  2. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  3. 网络热恋之XML解析

    XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...

  4. Python 爬虫笔记、多线程、xml解析、基础笔记(不定时更新)

    1  Python学习网址:http://www.runoob.com/python/python-multithreading.html

  5. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  6. Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

    Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...

  7. 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)

    一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...

  8. IOS 网络浅析-(五 xml解析)

    XML 可扩展标记语言 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言 易读性高,编码手写难度小,数据量大 NSXMLPars ...

  9. JSON解析和XML解析

    一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSStrin ...

随机推荐

  1. Microsoft Cortana移动版除美国市场外不再可用

    导读 先前已经透露,Microsoft Cortana的移动版本已不复存在.目前,Microsoft Cortana在移动设备上的多个国家和地区中支持多种语言.微软的Cortana移动版本不再支持的市 ...

  2. 一、log4j日志框架的理论和不同场景使用

    1.日志框架: 工作中要进行Java输出日志时,你需要一个或者多个日志框架.框架能提供对象.方法和必要的配置来发送日志信息.Java语言本身有自带的日志实现包java.util.logging.还有很 ...

  3. Linux centosVMware PHP动态扩展模块

    PHP动态扩展模块 /usr/local/php/bin/php -m //查看模块 下面安装一个redis的模块 cd /usr/local/src/ wget https://codeload.g ...

  4. 理解JS中的回调(Callback)函数

    今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...

  5. 127、Java面向对象之对象的比较

    01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...

  6. 「快学springboot」16.让swagger帮忙写接口文档

    swagger简介 官方的介绍 THE WORLD'S MOST POPULAR API TOOLING Swagger is the world's largest framework of API ...

  7. Linux学习计划中遇到的问题记录

    随时更新 Linux安装到网络联通遇到的问题及解决办法 1.命令区分大小写 2..网络连通 ping本地 地址遇到问题 解决办法: https://blog.csdn.net/qq_42074075/ ...

  8. Django:邮件功能实现

    django-users2和django的邮件功能模块都有相关的实现 ----------------------------------------------------------------- ...

  9. eclipse安装SVN插件的两种方法

    eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...

  10. Day2-G-Sticks-POJ1011

    George took sticks of the same length and cut them randomly until all parts became at most 50 units ...