-----记录和回顾是一个比学习更重要的环节-----

一、首先,我们需要知道xml是做什么的

1.作为软件的配置文件

2.作为数据的载体(小型的数据库)

二、xml的语法

xml文件以xml后缀名结尾。

xml文件需要使用xml解析器去解析。浏览器内置了xml解析器。

1.标签

语法:<student></student>  开始标签  标签体内容  结束标签

1)<student/> 或 <student></student> 空标签。没有标签体内容

2)xml标签名称区分大小写。

3)xml标签一定要正确配对。

4)xml标签名中间不能使用空格

5)xml标签名不能以数字开头

6)注意: 在一个xml文档中,有且仅有一个根标签

2.属性

语法: <Student name="eric">student</Student>

注意:

1)属性值必须以引号包含,不能省略,也不能单双引号混用!!!

2)一个标签内可以有多个属性,但不能出现重复的属性名!!!

3.注释

语言: <!--  xml注释 -->

4.文档声明

语法: <?xml version="1.0" encoding="utf-8"?>

version: xml的版本号

encoding: 解析xml文件时查询的码表(解码过程时查询的码表)

注意:

1)如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的encoding来保存文 件。

2)如果用记事本工具修改xml文件,注意保存xml文件按照文档声明的encoding的码表来保存,保证xml文件保存的码表和encoding是一致的。

5.转义字符

在xml中内置了一些特殊字符,这些特殊字符不能直接被浏览器原样输出。如果希望把这些特殊字符按照原样输出到浏览器,对这些特殊字符进行转义。转义之后的字符就叫转义字节。

特殊字符  转义字符

<                &lt;

>                &gt;

"                 &quot;

&                 &amp;

空格            &nsbp;

三、dom4j解析xml

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

     /**
* 遍历所有节点
* @throws Exception
*
*/
@Test
public void test2 () throws Exception{
//1.创建一个xml解析器对象
SAXReader saxReader = new SAXReader();
//2.读取xml文档,返回Document对象
Document read = saxReader.read(new File("./src/test.xml"));
Element rootElement = read.getRootElement();
getElement(rootElement);
} private void getElement(Element element){
System.out.println(element.getName());
Iterator<Node> it = element.nodeIterator();
while (it.hasNext()) {
Node node = it.next();
if (node instanceof Element) {
Element element2 = (Element)node;
getElement(element2);
}
}
}

输出结果:

students
student
name
age
student
name
age

获取属性:

     /**
* 获取属性
* @throws Exception
*/
@Test
public void test4() throws Exception{
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(new File("./src/test.xml"));
Element element = read.getRootElement().element("student");
String attributeValue = element.attributeValue("id");
System.out.println(attributeValue);
Attribute idattr = element.attribute("id");
String name = idattr.getName();
System.out.println("name:"+name+"\n"+"value:"+idattr.getValue());
List<Attribute> idattrs = element.attributes();
for(Attribute attribute : idattrs){
System.out.println("name:"+attribute.getName()+" value:"+attribute.getValue());
}
}

获取单标签

     @Test
public void test3() throws Exception{
//1.读取xml文件
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(new File("./src/test.xml"));
Element rootElement = read.getRootElement();
/* System.out.println("rootElement:"+rootElement.getName());
Element element = rootElement.element("student");
System.out.println("element:"+element.getName());
Iterator<Element> elemIt = rootElement.elementIterator("student");
while(elemIt.hasNext()){
Element next = elemIt.next();
System.out.println(next.getName());
}*/
List<Element> elements = rootElement.elements();
//list的三种遍历方式1.普通遍历2.强化for循环3.迭代器
//1.list的普通遍历
/* for(int i = 0 ;i < elements.size();i++)
{
Element element = elements.get(i);
System.out.println(element.getName());
}*/
//2.list的强化遍历
/* for(Element element :elements){
System.out.println(element.getName());
}*/
//3.迭代器
/* Iterator<Element> it = elements.iterator();
while(it.hasNext()){
Element next = it.next();
System.out.println(next.getName());
}*/
Element nameelement = read.getRootElement().element("student").element("name");
System.out.println(nameelement.getName());
}

获取文本

     @Test
public void test5() throws Exception{
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(new File("./src/test.xml"));
String text = read.getRootElement().element("student").element("name").getText();
System.out.println(text);
}

demo:将test.xml文件中的内容封装在类中

test.xml

 <?xml version="1.0" encoding="utf-8"?>
<students>
<student id = "001">
<name>张三</name>
<age>20</age>
</student>
<student id = "002">
<name>李四</name>
<age>25</age>
</student>
</students>

StudentTest.java

 package xmlRead;

 public class StudentTest {
public String id;
public String name;
public String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
} @Override
public String toString() {
return "id:"+this.id +" name:"+this.name+" age:"+this.age;
}
}

readStudent类

 public class ReadStudent {
public static void main(String[] args) throws Exception {
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new File("./src/test.xml"));
Element rootElement = doc.getRootElement();
Iterator<Element> eleIt = rootElement.elementIterator();
while (eleIt.hasNext()) {
Element element = eleIt.next();
StudentTest student = new StudentTest();
student.setId(element.attributeValue("id"));
student.setName(element.elementText("name"));
student.setAge(element.elementText("age"));
System.out.println(student.toString());
}
}
}

输出结果:

id:001  name:张三     age:20
id:002 name:李四 age:25

读取一个完整的test.xml文件(仅读内容)

 /**
* 读取一个完整的xml文件。
* @author ihome
*
*/
public class readXMl {
@Test
public void test() throws Exception{
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(new File("./src/test.xml"));
Element rootElement = read.getRootElement();
StringBuffer sBuffer = new StringBuffer();
getElementCild(rootElement,sBuffer);
System.out.println(sBuffer.toString());
}
private void getElementCild(Element element,StringBuffer sBuffer){
sBuffer.append("<"+element.getName());
List<Attribute> attributes = element.attributes();
for(Attribute attribute:attributes){
sBuffer.append(" "+attribute.getName()+" = "+attribute.getValue());
}
sBuffer.append(">");
sBuffer.append(element.getText());
Iterator<Element> eleIt = element.elementIterator();
while(eleIt.hasNext()){
Element next = eleIt.next();
getElementCild(next,sBuffer);
}
sBuffer.append("</"+element.getName()+">");
}
}

dom4j读取xml的更多相关文章

  1. 使用dom4j读取xml连接数据库与之单例模式

    使用dom4j读取xml ,加入jar包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar public class XmlConfigReader { //懒汉式,延迟加载 ...

  2. RSS阅读器(一)——dom4j读取xml(opml)文件

    接触java不久,偶有收获,最近想做一个web版RSS阅读器来锻炼一下.手头有几个从不同版本的foxmail中导出的opml文件,大家应该都知道,opml文件就是xml格式的.那么就先从这里入手,练习 ...

  3. 使用dom4j 读取XML文件

    第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...

  4. DOM4J读取XML文件

    最近在做DRP的项目,其中涉及到了读取配置文件,用到了DOM4J,由于是刚开始接触这种读取xml文件的技术,好奇心是难免的,于是在网上又找了一些资料,这里就结合找到的资料来谈一下读取xml文件的4中方 ...

  5. Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence

    1.Java使用dom4j读取xml时报错: org.dom4j.DocumentException: Error on line 2 of document  : Invalid byte 2 of ...

  6. 【XML】利用Dom4j读取XML文档以及写入XML文档

    Dom4j简介 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能 ...

  7. java DOM4J 读取XML

    最近学习Java,在处理XML文档的时候,查阅相关资料,发现了DOM4J这个jre库,相对C#的XML处理来说,功能还算是跟得上 下面展示一篇我自己写的一个XML读取测试 import java.ut ...

  8. dom4j 读取xml

    package core.util; import java.io.File; import java.util.Iterator; import java.util.List; import org ...

  9. DOM4J 读取XML配置文件进行数据库连接

        介绍介绍DOM4J.    据说是非常优秀非常优秀的Java XML  API(Dom4j is an easy to use, open source library for working ...

随机推荐

  1. 微信app支付(android端+java后台)

    本文讲解使用微信支付接口完成在android开发的原生态app中完成微信支付功能, 文章具体讲解了前端android如何集成微信支付功能以及后台如何组装前端需要支付信息, 话不多话, 具体看文章内容吧 ...

  2. 数据结构之链表-链表实现及常用操作(C++篇)

    数据结构之链表-链表实现及常用操作(C++篇) 0.摘要 定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 ...

  3. Vijos P1116 一元三次方程求解【多解,暴力,二分】

    一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...

  4. HDU5131-Song Jiang's rank list HDU5135-Little Zu Chongzhi's Triangles(大佬写的)

    Song Jiang's rank list Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java ...

  5. Redis在Php项目中的实际应用场景

    前言 一些案例中有的同学说为什么不可以用string类型,string类型完全可以实现呀 我建议你看下我的专栏文章<Redis高级用法>,里面介绍了用hash类型的好处 商品维度计数 对商 ...

  6. JavaSE笔记-异常

    Java 异常 Throwable类的体系结构(一些常用的) 异常分类 checked,unchecked 区分:RuntimeException及其子类,Error类及其子类,是unchecked ...

  7. 想要学习jQuery却不知从何开始?本文为你精选5个例子帮你快速成为jQuery大师

    本文阅读对象:WEB前端开发初学者.jQuery初学者.JavaScript初学者 本文目的:jQuery真正入门.快速入门.快速搞清楚jQuery是什么,同时为你的jQuery大师之路开启第一道门. ...

  8. 怎样用PS对照片进行美白?

    摘录自:http://product.pconline.com.cn/itbk/software/ps/1408/5336118.html 步骤1.打开需要美白肤色的照片.本教程为防止侵犯他人肖像权, ...

  9. DotNetCore 定时服务 HangFire

    最近在写一个Asp.net core 的项目,其中有用到定时任务,一开始准备要用Quartz.net.毕竟在Java中和.net framework中都表现突出. 但是看了一下Quartz.net 关 ...

  10. JavaScript String(字符串对象)

    String 对字符串的支持 String.charAt( n ) 返回字符串中的第n个字符 n 是下标 String.charCodeAt( ) 返回字符串中的第n个字符的代码 String.con ...