import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; public abstract class XMLReader {
// 只需要一份 documentBuilder
private static DocumentBuilder documentBuilder; static {
try {
documentBuilder = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
} public XMLReader() {
} // 获取Document,Document是w3c的,不要导错了
public static Document openDocument(InputStream is) {
Document document = null;
try {
document = documentBuilder.parse(is);
} catch (SAXException | IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
} return document;
} public static Document openDocument(String xmlPath) {
InputStream is = XMLReader.class.getResourceAsStream(xmlPath);
if (is == null) {
try {
// 自定义异常
throw new XMLFileNotExistException("文件[" + xmlPath+ "]不存在!");
} catch (XMLFileNotExistException e) {
e.printStackTrace();
}
} return openDocument(is);
} public static Document openDocument(File path) {
InputStream is = null;
try {
is = new FileInputStream(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return openDocument(is);
} // 抽象方法,由用户自行处理得到的标签
public abstract void dealElment(Element element, int index); // 抽象方法在for循环中,每次读取到一个标签,就交给抽象方法,由用户自行使用
public XMLReader parse(Element element, String tagname) {
NodeList nodeList = element.getElementsByTagName(tagname); for (int index = 0; index < nodeList.getLength(); index++) {
Element ele = (Element) nodeList.item(index); dealElment(ele, index);
} return this;
} public XMLReader parse(Document document, String tagname) {
NodeList nodeList = document.getElementsByTagName(tagname); for (int index = 0; index < nodeList.getLength(); index++) {
Element element = (Element) nodeList.item(index); dealElment(element, index);
} return this;
} }

这是我们的XML文件,对其进行解析

 <?xml version="1.0" encoding="UTF-8"?>
<Test>
<class name = "第一个标签" type = "firstLable">
<parameter id = "one" value = "一"></parameter>
<parameter id = "two" value = "二"></parameter>
<parameter id = "thr" value = "三"></parameter>
</class>
<class name = "第二个标签" type = "secondLable">
<parameter id = "four" value = "四"></parameter>
<parameter id = "six" value = "五"></parameter>
</class>
</Test>
public static void main(String[] args) {
new XMLReader() { @Override
public void dealElment(Element element, int index) {
String name = element.getAttribute("name");
String type = element.getAttribute("type"); System.out.println("name=" + name + " type=" + type); new XMLReader() { @Override
public void dealElment(Element element, int index) {
String id = element.getAttribute("id");
String value = element.getAttribute("value"); System.out.println("\tid=" + id + " value=" + value);
}
}.parse(element, "parameter");
}
}.parse(XMLReader.openDocument("/test.xml"), "class");
}

结果如下

【Java】XML文件的解析的更多相关文章

  1. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  2. Java XML文件解析

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

  3. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  4. JDOM方法实现对XML文件的解析

    首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...

  5. [置顶] Android开发之XML文件的解析

    Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...

  6. Java XML DOM解析范例源码

    下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...

  7. 用SAX和PULL进行XML文件的解析与生成

    XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...

  8. 【文件处理】xml 文件 DOM解析

    一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...

  9. xml文件的解析

    1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...

  10. 类的反射及xml文件的解析

    类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...

随机推荐

  1. C# 最齐全的上传图片方法

    方法里包括了图片大小限制.图片尺寸.文件内容等等的判断... 该案例是mvc下的demo,支持单张图片上传. public ActionResult Upload() { string imgurl ...

  2. winSCP无法连接虚拟机Linux解决

    刚在虚拟机上装上Linux(Centos7)后使用winSCP建立文件共享发现连接超时,经过几个小时的查找发现Linux中没有eth0文件,这说明其网卡名不是eth0,在网上查过一些解决办法有的通过修 ...

  3. Linux 线程编程2.0——线程同步-互斥锁

    当我们需要控制对共享资源的存取的时候,可以用一种简单的加锁的方法来控制.我们可以创建一个读/写程序,它们共用一个共享缓冲区,使用互斥锁来控制对缓冲区的存取. 函数 pthread_mutex_init ...

  4. Vuejs——(12)组件——动态组件

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   本篇资料来于官方文档: http://cn.vuejs.org/guide/components ...

  5. ubuntu16.04安装最新版docker、docker-compose、docker-machine

    安装前说明: 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose.docker-machine. docker:有两个版本:docker-ce(社区版)和do ...

  6. 用 Docker 构建、运行、发布来一个 Spring Boot 应用

    本文演示了如何用 Docker 构建.运行.发布来一个 Spring Boot 应用. Docker 简介 Docker 是一个 Linux 容器管理工具包,具备“社交”方面,允许用户发布容器的 im ...

  7. unity 简单通用游戏模式设计

    好吧好吧,又谈到这个问题了,其实早就想写这个博客了,犹豫了好久.在设计游戏的时候我本人是很排斥什么游戏架构设计,mvc什么的,我只想马上动手就把自己的游戏玩法最快的用代码敲出来,还不会出无法挽回的错误 ...

  8. Adobe reader multiple languages pack

    用户打开客户发过来的PDF文档,显示不正常,这是电脑的Adobe Reader缺少相关的字体. 可以从下面地址下载相对版本的字体包安装:http://supportdownloads.adobe.co ...

  9. Thinking in Java from Chapter 21

    From Thinking in Java 4th Edition 并发 线程可以驱动任务,因此你需要一种描述任务的方式,这可由Runnable接口来提供. 要想定义任务,只需要实现Runnable接 ...

  10. Shell-14--awk

    awk ' 条件1{ 动作1} 条件2{动作2}...' 文件名 awk处理数据是 先读取第一行 然后再去处理 printf 不会加入换行符,需要手动加入 print 会自动加换行 begin 是在后 ...