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. python之os库

    python之os库 os.name 判断现在正在实用的平台,Windows 返回 'nt'; Linux 返回'posix' >>> os.name 'nt' os.getcwd( ...

  2. Celery分布式任务队列快速入门

    本节内容 1. Celery介绍和基本使用 2. 项目中使用Celery 3. Celery定时任务 4. Celery与Django结合 5. Django中使用计划任务 一  Celery介绍和基 ...

  3. ubuntu16.04下idea、webstorm等开发工具不能输入中文问题

    问题: ubuntu16.04下idea.webstorm开发工具不能输入中文,就算切换到中文输入法输入的也是英文字母. 解决方案: 1.vim打开开发工具的启动文件(idea下就是idea.sh) ...

  4. unicode 编解码记录

    unicode 万国码.世界上所有的符号都有对应的Unicode code point.一般是2个字节. 这个字节可以通过任意中方式编码为二进制,例如用来保存到文件.一般通过UTF-x(例如utf-8 ...

  5. Fetch的使用及兼容ie的处理

    Fetch 作为一个与时俱进的前端,Fetch当然应该有所了解和涉猎.如果你没有听说过Fetch,那么ajax应该不陌生吧.Fetch相当于是一个新版本的Ajax,虽然现在我们常常使用的仍是ajax, ...

  6. 1.viewpager

    ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view. ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他的view类. ...

  7. JavaScript实现多张图片上传功能

    今天闲着没事,把之前的多张图片上传代码整理了下. 页面主要代码: <div class="upBox upBox2"> <div class="d1&q ...

  8. vue 自学笔记(6) axios的使用

    前情提要:axios 的使用 axios是一个ajax 的包,主要在node.js 使用 axios 的官网 https://www.kancloud.cn/yunye/axios/234845 一: ...

  9. Zabbix系列之三——部署JMX监控tomcat

    zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以 ...

  10. Djang--module--单表

    Django模型层   一 ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装