package cn.itcast.xml;

 import cn.itcast.domain.Book;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Before;
import org.junit.Test; import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; public class Dom4jDemo { private Document document; @Before
public void init() throws DocumentException {
SAXReader reader = new SAXReader();
InputStream is = Dom4jDemo.class.getClassLoader().getResourceAsStream("book.xml"); document = reader.read(is);
} @Test
public void parseMethod2() throws DocumentException {
//获取文档根元素,books
Element root = document.getRootElement(); //获取所有book元素
List<Element> bookElements = root.elements(); //解析所有book元素,并添加到books集合中
List<Book> books = new ArrayList<>(); for (Element bookElement : bookElements) {
//获取author属性值
String author = bookElement.attributeValue("author");
//获取子元素name的文本
String name = bookElement.element("name").getText();
//获取子元素price的文本
String priceStr = bookElement.element("price").getText();
double price = Double.parseDouble(priceStr);
//创建对应的book对象,并添加到books集合中
books.add(new Book(author, name, price));
} //打印
books.forEach(System.out::println); } @Test
public void parseMethod1() throws FileNotFoundException, DocumentException {
//获取根元素
Element root = document.getRootElement();
System.out.println(root.getName()); List<Book> books = new ArrayList<>(); //获取所有book元素,解析并保存到books集合中。
List<Node> bookNodes = document.selectNodes("/books/book");
for (Node bookNode : bookNodes) {
//获取作者
String author = bookNode.valueOf("@author");
// System.out.println(author); /*
斜杠开头表示文档,中间的斜杠则表示直接子节点
错误代码:
String name = bookNode.valueOf("/name");
表示选区文档下的name元素,而文档下只有books元素。
*/
//获取书名
List<Node> nameNodes = bookNode.selectNodes("name");
String bookName = nameNodes.get(0).getText();
// System.out.println(bookName); //获取价格
List<Node> priceNodes = bookNode.selectNodes("price");
double price = (double) Double.parseDouble(priceNodes.get(0).getText()); books.add(new Book(author, bookName, price));
} //打印结果
books.forEach(System.out::println);
}
}

Dom4jDemo.java

 package cn.itcast.domain;

 public class Book {
private String author;
private String name;
private Double price; public Book(){} public Book(String author, String name, Double price) {
this.author = author;
this.name = name;
this.price = price;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Double getPrice() {
return price;
} public void setPrice(Double price) {
this.price = price;
} @Override
public String toString() {
return "Book{" +
"author='" + author + '\'' +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}

Book.java

 <?xml version="1.0" encoding="UTF-8"?>
<books>
<book author="天蚕土豆">
<name>斗破苍穹</name>
<price>86</price>
</book>
<book author="萧潜">
<name>缥缈之旅</name>
<price>92</price>
</book>
<book author="萧鼎">
<name>诛仙</name>
<price>98</price>
</book>
<book author="天下霸唱">
<name>鬼吹灯</name>
<price>124</price>
</book>
<book author="辰东">
<name>神墓</name>
<price>128</price>
</book>
</books>

book.xml

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.itcast.xml-parser</groupId>
<artifactId>xml-parser-demo1</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency> <!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies> </project>

pom.xml

 package cn.itcast.xml;

 import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test; import java.util.List;
/*
作者:北冥有鱼_很好吃
链接:https://www.jianshu.com/p/806bb1bdc06f
*/
public class Dom4j_02{ @Test
public void parse() throws Exception {
// 1. 创建一个 saxReader 对象
SAXReader saxReader = new SAXReader();
// 2. 将数据读取到 document 对象中
Document document = saxReader.read(Dom4j_02.class.getClassLoader().getResourceAsStream("servlet.xml"));
// 3. 使用 document 对象调用 getRootElement 方法获取根标签, 返回 Element 接口实现类对象
Element rootElement = document.getRootElement();
// 4. 使用 rootElement 根标签对象调用 elements 方法, 传入 servlet, 获取servlet标签对象
List<Element> servletElements = rootElement.elements("servlet");
// 5. 遍历, 并获取该标签下的子标签数据内容, 使用父标签对象调用elementText方法, 传入子标签名称获取数据
for (Element servlet : servletElements) {
String name = servlet.elementText("servlet-name");
String cls = servlet.elementText("servlet-class");
System.out.println(name + " : " + cls);
}
// 使用 rootElement 根标签对象调用 elements 方法, 传入 servlet-mapping, 获取servlet-mapping标签对象
List<Element> mappingElements = rootElement.elements("servlet-mapping");
for (Element mapping : mappingElements) {
String name = mapping.elementText("servlet-name");
String url = mapping.elementText("url-pattern");
System.out.println(name + " = " + url);
}
}
}

Dom4j_02.java 解析servlet.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!--
作者:北冥有鱼_很好吃
链接:https://www.jianshu.com/p/806bb1bdc06f
-->
<servlets>
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>MyServlet1</servlet-class>
</servlet>
<servlet>
<servlet-name>servlet2</servlet-name>
<servlet-class>MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/s1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>/s2</url-pattern>
</servlet-mapping>
</servlets>

servlet.xml

dom4j解析简单的xml文件 解析元素并封装到对象的更多相关文章

  1. DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比

    1. DOM(Document Object Model)文档对象模型1. DOM是W3C指定的一套规范标准,核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的&qu ...

  2. XML文件解析-DOM4J方式和SAX方式

    最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml ...

  3. 通过正则表达式实现简单xml文件解析

    这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node ...

  4. xml解析之使用dom4j的api对xml文件进行CRUD(二)

    在使用dom4j的api对xml文件进行CRUD(一)见博客http://blog.csdn.net/qq_32059827/article/details/51524330的基础上,再对做一次练习. ...

  5. Android之旅十四 android中的xml文件解析

    在我们做有关android项目的时候,肯定会涉及到对xml文件的解析操作.以下给大家介绍一下xml文件的解析.包括DOM.SAX.Pull以及曾经我们用到的DOM4J和JDOM: 要解析的XML文件: ...

  6. 解析和操作XML文件

    Dom4j工具 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件代码 1,Domj4读取xml文件 ,准备工作:读取整个文档并获取根节点 // ...

  7. Java XML文件解析

    四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例) 蓝色字体内容由上一篇博文中补充进来的,写作风格比较好,大家有兴趣可以去查看原文 众所周知,现在解析XML的方法越来越多,但主流的方法也就四 ...

  8. android基础知识13:AndroidManifest.xml文件解析

    注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...

  9. Android之AndroidManifest.xml文件解析

    转自:Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文 ...

随机推荐

  1. 30个Jquery灯箱插件

    jQuery 是非常流行的JS框架,其俨然已成了开发者的必备工具,其中的jQuery Lightbox插件更是为广大开发者所喜爱.它惊人的特征之一是jQuery Lightbox插件有很多变化. 下面 ...

  2. Eclipse IDE 主题颜色

    已安装好的 Eclipse IDE help > install new software 打开窗口 输入地址 http://eclipse-color-theme.github.io/upda ...

  3. BZOJ-4819: 新生舞会(01分数规划+费用流)

    Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...

  4. AndyQsmart ACM学习历程——ZOJ3870 Team Formation(位运算)

    Description For an upcoming programming contest, Edward, the headmaster of Marjar University, is for ...

  5. 几个重要的 ASM Disk Groups 参数

    几个重要的Disk group 属性: 1. ACCESS_CONTROL.ENABLED该属性用来控制某个disk group 上ASM FILE Access Control. 该参数有2个值:t ...

  6. bzoj 3232 圈地游戏——0/1分数规划(或网络流)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3232 当然是0/1分数规划.但加的东西和减的东西不在一起,怎么办? 考虑把它们合在一起.因为 ...

  7. Enum定义位域, 即可以通过位操作来产生未命名的值

    通过FlagsAttribute可以实现. // A bit field or flag enumeration of harvesting seasons. [Flags] public enum ...

  8. Windows WMIC命令使用详解2

    Windows WMIC命令使用详解(附实例) https://blog.csdn.net/aflyeaglenku/article/details/77878525 第一次执行WMIC命令时,Win ...

  9. 47: error: undefined reference to `QWebView::QWebView(QWidget*)'

    QT  5.6版本 用Qt界面设计器打开界面文件,在界面上托入QWebView控件,这时运行会出现错误,错误如下: ......... undefined reference to `QWebView ...

  10. Advanced R之编程风格

    转载请注明出处,谢谢.   编程风格指导 好的编码风格如同正确使用标点符号一样重要.没有编码规范仍然可以管理代码,但是有代码规范会使代码更易阅读.如同标点样式,编码规范也有不同.下面描述的是我所使用的 ...