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. ubuntu 配置jdk报错解决办法

    vi /etc/profile ,添加如下代码 export JAVA_HOME=/home/mark/android/jdk1.8 export JRE_HOME=/home/mark/androi ...

  2. Python数字与字符之间的转换

    Python数字与字符之间的转换 命令 意义 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 co ...

  3. 【python接口自动化测试教程】00---00章节就代表开篇吧

    今天突然想写个接口测试教程,由于本人是初级的比小白稍微好那么一丢丢,所以不知道能不能坚持下来 写的不对的地方还请大咖指教 先去忙自己的工作了,忙完了回来开始写第一章吧 或者先写个大纲,要不然写的章节会 ...

  4. PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf

    sscanf – 根据指定格式解析输入的字符 echo – 输出一个或多个字符串 print – 输出字符串 sprintf – 返回格式化字符串 vsprintf – 返回格式化字符串 (参数为数组 ...

  5. esp32的GPIO操作

    对于任何一款芯片,GPIO接口是其最基本的组成部分,也是一款芯片入门的最基本操作,下面论述下 关于esp32开发版的GPIO操作,本文中重点讲解下 关于如何创建eclipse工程,并通过eclipse ...

  6. Hadoop 系列文章(一) Hadoop 的安装,以及 Standalone Operation 的启动模式测试

    以前都是玩 java,没搞过 hadoop,所以以此系列文章来记录下学习过程 安装的文件版本.操作系统说明 centos-6.5-x86_64 [bamboo@hadoop-senior opt]$ ...

  7. css3简单旋转

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>&l ...

  8. java基础要点总结

    无意间看到youtube上的一组java基础的视频,顺便做了笔记,整理如下: 出处: 作者:Edward Shi 视频链接:https://www.youtube.com/watch?v=IQE9jH ...

  9. MySQL 基础--字符类型

    ##=====================================================================================## MySQL支持的字符 ...

  10. callback vs async.js vs promise vs async / await

    需求: A.依次读取 A|B|C 三个文件,如果有失败,则立即终止. B.同时读取 A|B|C 三个文件,如果有失败,则立即终止. 一.callback 需求A: let read = functio ...