XML文件处理
XML
XML简介
XML被设计用来传输和存储数据。
XML是可扩展标记语言。
解析XML的几种方式
DOM,DOM4j------先把XML文件读取到内存中,然后再解析
SAX----------边读边解析,适用于大文件的
DOM4j解析
导入dom4j jar包----dom4j-1.6.1.jar
SAXReader,Document,Element,Attribute等都是dom4j包下的
1.创建一个xml解析器对象
SAXReader reader=new SAXReader();
2.通过解析器的read方法将配置文件读取内存中,生成一个Document【org.dom4j】树
Document doc=(Document) reader.read("config/student.xml");
3.获取根节点
Element root = doc.getRootElement();
//开始遍历根节点
Iterator<Element> ele = root.elementIterator();
while(ele.hasNext()) {
Element stu = ele.next();//得到每个学生
//准备遍历学生里面的节点
Iterator<Element> inner = stu.elementIterator();
while(inner.hasNext()) {
//里面的标签
Element xinxi = inner.next();
//拿到该节点内容
String stringValue = xinxi.getStringValue();
System.out.println(stringValue);
}
System.out.println("==========");
}
//config/studednt.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>吴京</name>
<age>35</age>
<notes>男,演员</notes>
</student>
<student>
<name>谢楠</name>
<age>34</age>
<notes>女,主持人</notes>
</student>
<student>
<name>胡歌</name>
<age>39</age>
<notes>男,演员</notes>
</student>
<student>
<name>金泰妍</name>
<age>30</age>
<notes>女,主持人,歌手</notes>
</student>
</students>


SAX解析
SAX方式:事件驱动,边读边写,解析大的xml文件。是JDK中自带的
优点:无需将整个文档加载到内存中,所以内存消耗少,适合解析特别大的xml文件。
SAX解析四步:
1.创建解析工厂:通过newInstance()方法获取
//它的构造方法受保护-----javax.xml.parsers包下的类
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
2.通过解析工厂创建解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
-------------------------------------------------------
解析器里的方法parser(解析的意思)方法,传入;两个参数:xml路径,事件处理器。
saxParser.parser("person.xml",new MyDefaultHandler());
DefaultHandler---默认解析器---里面有方法
characters---接收元素内的字符数据通知
startElement---开始
endElement---结束
//MyDefaultHandler类继承了DefaultHandler类
class MyDefaultHandler extends DefaultHandler{
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//开始的标签
System.out.print("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//字符串
System.out.print(new String(ch,start,length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//结束标签---
System.out.print("</"+qName+">");
}
}
//config/person.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person>
<name>张三</name>
<age>15</age>
<sex>男</sex>
<job>学生</job>
</person>
<person>
<name>李四</name>
<age>25</age>
<sex>男</sex>
<job>程序员</job>
</person>
<person>
<name>王五</name>
<age>35</age>
<sex>女</sex>
<job>老板</job>
</person>
<person>
<name>金泰妍</name>
<age>30</age>
<sex>女</sex>
<job>歌手</job>
</person>
<person>
<name>IU</name>
<age>29</age>
<sex>女</sex>
<job>演员</job>
</person>
</persons>

DOM4j和xpath解析XML获取节点元素的文本内容
用xpath要导入jaxen-1.1-beta-7.jar
public class Test3_xpath {
public static void main(String[] args) throws DocumentException, ClassNotFoundException, SQLException {
//jaxen-1.1-beta-7.jar
//用XPath语法就要用到上边这个jar包
//dom4j+xpath解析
SAXReader reader=new SAXReader();
Document doc=reader.read("config/sys-config.xml");
//Element root = doc.getRootElement();
//driver-name节点元素的路径:config--》database-info--》driver-name
//driver-name节点元素的xpath路径:/config/database-info/driver-name
//返回值Node 参数:String --强制类型转换
//直接获取到指定节点元素 Element eledrivername= (Element) doc.selectSingleNode("/config/database-info/driver-name");
//获取该节点元素对象的文本内容
String drivername = eledrivername.getStringValue();
System.out.println(drivername);
//url节点元素的路径:config-->database-info-->url
//url节点元素的xpath路径:/config/database-info/url
//url节点元素的xpath路径:config//url
//url节点元素的xpath路径://url
Element eleurl = (Element) doc.selectSingleNode("config//url");
String url = eleurl.getStringValue();
System.out.println(url);
//user节点元素的路径:config-->database-info-->user
//user节点元素的xpath路径:/config/database-info/user
//user节点元素的xpath路径:config//user
//user节点元素的xpath路径://user
Element eleuser = (Element) doc.selectSingleNode("//user");
String user = eleuser.getText();//也可获得
System.out.println(user);
//password节点元素的路径:config-->database-info-->password
//password节点元素的xpath路径:/config/database-info/password
Element elepassword = (Element) doc.selectSingleNode("//password");
String password = elepassword.getStringValue();
System.out.println(password);
System.out.println("-------------连接数据库-------------------");
Class.forName(drivername);
Connection con=(Connection) DriverManager.getConnection(url,user,password);
Statement stmt = con.createStatement();
String sql="select * from user";
ResultSet result = stmt.executeQuery(sql);
System.out.println(result);
while(result.next()) {
String string = result.getString(1);
String string2 = result.getString(2);
System.out.println("user:"+string+",password:"+string2);
}
result.close();
stmt.close();
con.close();
}
}
//config/sys-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<database-info>
<driver-name>com.mysql.jdbc.Driver</driver-name>
<url>jdbc:mysql://localhost:3306/mydb3</url>
<user>root</user>
<password>123456</password>
</database-info>
</config>

DOM4j和xpath解析XML获取节点元素的属性对象的值
获取指定节点元素的属性对象 以及属性对象的值
port.getName()----port 属性对象的名字
port.getValue()-----8080 属性对象的值
或者直接用该节点对象.attributeValue("属性名")也能获取对应的值
public class Test4_ServerParser {
public static void main(String[] args) throws DocumentException {
SAXReader saxReader=new SAXReader();
Document doc = saxReader.read("config/server.xml");
//获取connector节点元素对象的路径:server-->service-->connector
Element eleconnector = (Element) doc.selectSingleNode("server/service/connector");
//获取eleconnector的属性port
Attribute port = eleconnector.attribute("port");
//获取属性对象的值
String portvalue = port.getValue();
String portvalue2 = eleconnector.attributeValue("port");
System.out.println(portvalue);
System.out.println(portvalue2);
}
}
//config/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<server>
<service>
<connector port="8080"></connector>
</service>
</server>
结果:8080
8080
XML文件处理的更多相关文章
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- MyBatis2:config.xml文件
前言 前一篇文章,讲了MyBatis入门,讲到了MyBatis有两个基本的配置文件,一个用来配置环境信息,一个用来写SQL语句.前者我把它命名为config.xml,config.xml的内容是: & ...
- 3. 解析 struts.xml 文件
1. struts.xml 文件基本配置: 主要放在资源路径下,配置 sturts2相关的 Action , 拦截器等配置 <struts> <!-- 设置常量 --> < ...
- Eclipse代码和xml文件的智能提示
一.代码智能提示 Windows → Preferences → Java→ Editor → Content Assist 将 Auto activation delay(ms): 改为 0 将 A ...
- node使用xml-writer生成本地XML文件实例
npm中xml-writer文档的链接地址:https://www.npmjs.com/package/xml-writer npm中的文档比较简单,而且生成本地xml文件的demo并不正确.本篇是对 ...
- xml文件解析(解析以后在RootTableViewController输出)
这是从美团弄得xml文件,地区和经纬度. 你点了地区以后 , 就可以查看经纬度 ,因为笔者懒, 有现成的文本框 , 所有偷懒了. 下面是一些枯燥的代码了 . #import <UIKit/UI ...
- iOS xml文件的解析方式 XMLDictionary,GDataXMLNode,NSXMLParser
iOS9之后,默认网络请求是https,所有我们要设置一下网络安全,具体设置如下 1.第三方类库 XMLDictionary 下载地址: https://github.com/nicklockwood ...
- java-w3c.document生成xml文件
案例 /** * 创建和写入xml * @param xmlrootname * @param waitConverList */ private void createAndWriterXML(St ...
- 使用sublime一键格式化XML文件
1 sublime简介 sublime是一款代码编辑和阅读软件,体积小,运行快,界面非常简洁漂亮.官方地址:https://www.sublimetext.com/ 2 在sublime上安装插件 使 ...
随机推荐
- 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position ...
- linux每日命令(3):ln命令
ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...
- packetfence 7.2网络准入部署(二)
今天呢先说下packetfence部署的环境: 关于使用方法之前的帖子有介绍,一定要看哦 https://blog.csdn.net/qq_18204953/article/details/80708 ...
- Python 读取csv的某行
站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...
- Django登陆以后重定向到请求登陆的页面
登陆和注销操作在网页编程上很常见,这两个操作经常需要在操作成功以后转入发出请求的页面. 比如用户正在浏览一篇文章,发现下载该文章的附件需要登录才能进行,这时候点击登陆链接转入登陆页面,输入用户名密码登 ...
- 基音检测算法的性能:Performance Evaluation of Pitch Detection Algorithms
http://access.feld.cvut.cz/view.php?cisloclanku=2009060001 Vydáno dne 02. 06. 2009 (15123 přečtení) ...
- Java编程的逻辑 (84) - 反射
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- Entity Framework定义外键,限制通过migration命令自动更改字段名称
1.问题 在定义一个表的外键时,通过add-migration命令生成,并通过update-database更新到数据库,发现外键名称发生了重命名.举例说明: 人员表[User](Id,Name,Pa ...
- Java知多少(85)文本框和文本区
在图形界面中,文本框和文本区是用于信息输入输出的组件. 文本框 文本框(JTextField)是界面中用于输入和输出一行文本的框.JTextField类用来建立文本框.与文本框相关的接口是Action ...
- 【转载】Ubuntu安装之,硬盘分区
关于分区 如果你只是简单地想用上Ubuntu,可以这样操作:1)如果你是直接将整个硬盘都用来装Ubuntu,机器上没有需要保存的数据,或者已经做好备份的情况下,可以直接在Ubuntu分区时选择“向导─ ...