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. PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf

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

  2. iostat 命令详解

    前言 话说搞运维的人没有两把"刷子",都不好意思上服务器操作.还好,我还不是搞运维的,我一直都自诩是开发人员,奈何现在的东家运维人员"水"的一比,还要我这个自诩 ...

  3. 方向导数,梯度和梯度下降之BGD,SGD

    方向导数和梯度的直观理解,from知乎-马同学: https://www.zhihu.com/question/36301367 BGD,SGD: https://www.cnblogs.com/gu ...

  4. JavaScript实现LUHN算法验证银行卡号有效性

    一般验证银行卡有效性用到一种叫做LUHN的算法,简介请参考这篇博客:基于Luhn算法的银行卡卡号的格式校验 注意: 1.LUHN算法只是能校验卡号是否有效,并不能校验卡号和用户名是否一致. 2.如果有 ...

  5. vue 自学笔记(5) 列表渲染

    列表渲染 一:v-for 指令 当我们涉及到列表渲染数据的时候,不可能做一个重复的工作去不停的一个一个的渲染每一项列表.并且列表数据的表现,比如从后端请求过来的数据,不可能是一个一个的单独的 JSON ...

  6. iOS开发笔记(Swift)-通用App安装引导页的实现

    之前一直做的项目都是基于OC开发的,最近开始尝试使用Swift语言来重写整个项目. 本篇文章主要是讲述如何使用Swift来实现常见的通用App安装引导界面. 效果预览: 实现思路: 主要是采用了UIS ...

  7. (转)Linux内核参数之arp_ignore和arp_announce

    原文:https://blog.csdn.net/ccy19910925/article/details/79960599 一.arp_ignore和arp_announce介绍 arp_ignore ...

  8. mybatis随笔五之Executor

    在上一篇文章我们分析到了mapper接口方法的实现实际上是交由代理类来实现的,并最终调用Executor来查询,接下来我们对executor.query(ms, wrapCollection(para ...

  9. interface21 - web - DispatcherServlet(DispatcherServlet初始化流程)

    前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...

  10. MongoDB——学习

    db.baidupic.distinct("source") db.baidupic.find({ "source":{ $nin:[ "百度图片&q ...