【Java】XML文件的解析
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文件的解析的更多相关文章
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- Java XML文件解析
四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例) 蓝色字体内容由上一篇博文中补充进来的,写作风格比较好,大家有兴趣可以去查看原文 众所周知,现在解析XML的方法越来越多,但主流的方法也就四 ...
- Java中使用DOM4J来生成xml文件和解析xml文件
一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...
- JDOM方法实现对XML文件的解析
首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...
- [置顶] Android开发之XML文件的解析
Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...
- Java XML DOM解析范例源码
下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...
- 用SAX和PULL进行XML文件的解析与生成
XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...
- 【文件处理】xml 文件 DOM解析
一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...
- xml文件的解析
1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...
- 类的反射及xml文件的解析
类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...
随机推荐
- PHP字符串函数之 sscanf echo print sprintf vsprintf printf vprintf fprintf vfprintf
sscanf – 根据指定格式解析输入的字符 echo – 输出一个或多个字符串 print – 输出字符串 sprintf – 返回格式化字符串 vsprintf – 返回格式化字符串 (参数为数组 ...
- iostat 命令详解
前言 话说搞运维的人没有两把"刷子",都不好意思上服务器操作.还好,我还不是搞运维的,我一直都自诩是开发人员,奈何现在的东家运维人员"水"的一比,还要我这个自诩 ...
- 方向导数,梯度和梯度下降之BGD,SGD
方向导数和梯度的直观理解,from知乎-马同学: https://www.zhihu.com/question/36301367 BGD,SGD: https://www.cnblogs.com/gu ...
- JavaScript实现LUHN算法验证银行卡号有效性
一般验证银行卡有效性用到一种叫做LUHN的算法,简介请参考这篇博客:基于Luhn算法的银行卡卡号的格式校验 注意: 1.LUHN算法只是能校验卡号是否有效,并不能校验卡号和用户名是否一致. 2.如果有 ...
- vue 自学笔记(5) 列表渲染
列表渲染 一:v-for 指令 当我们涉及到列表渲染数据的时候,不可能做一个重复的工作去不停的一个一个的渲染每一项列表.并且列表数据的表现,比如从后端请求过来的数据,不可能是一个一个的单独的 JSON ...
- iOS开发笔记(Swift)-通用App安装引导页的实现
之前一直做的项目都是基于OC开发的,最近开始尝试使用Swift语言来重写整个项目. 本篇文章主要是讲述如何使用Swift来实现常见的通用App安装引导界面. 效果预览: 实现思路: 主要是采用了UIS ...
- (转)Linux内核参数之arp_ignore和arp_announce
原文:https://blog.csdn.net/ccy19910925/article/details/79960599 一.arp_ignore和arp_announce介绍 arp_ignore ...
- mybatis随笔五之Executor
在上一篇文章我们分析到了mapper接口方法的实现实际上是交由代理类来实现的,并最终调用Executor来查询,接下来我们对executor.query(ms, wrapCollection(para ...
- interface21 - web - DispatcherServlet(DispatcherServlet初始化流程)
前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...
- MongoDB——学习
db.baidupic.distinct("source") db.baidupic.find({ "source":{ $nin:[ "百度图片&q ...