解析XML内容到User对象
users.xml
<?xml version="1.0" encoding="UTF-8"?> <xml-root>
<conn-params>
<conn-url>jdbc:mysql://192.168.101.7:3306/bbs</conn-url>
<conn-driver>com.mysql.jdbc.Driver</conn-driver>
<conn-username>root</conn-username>
<conn-password>root</conn-password>
</conn-params> <person xmlns:u="http://example.org/user">
<u:user>
<u:username>xzc</u:username>
<u:password>sdf23223</u:password>
<u:birthday>2012-01-23</u:birthday>
</u:user>
<u:user>
<u:username>误闯</u:username>
<u:password>wuchuang3223</u:password>
<u:birthday>2002-01-03</u:birthday>
</u:user>
</person>
</xml-root>
采用DOM api 解析XML
1. User类
public class User {
private String username;
private String password;
private String birthday;
public String toString() {
return "username = " + username + ", password = " + password + ", birthday = " + birthday;
}
//省略setter,getter
}
2. DomUtil解析类
package sax.parsing.user; import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List; 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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource; public class DomUtil { private DocumentBuilderFactory builderFactory;
private DocumentBuilder builder;
private Document document; public DomUtil() throws ParserConfigurationException {
builderFactory = DocumentBuilderFactory.newInstance();
builder = builderFactory.newDocumentBuilder();
} public DocumentBuilderFactory getBuilderFactory() {
return builderFactory;
}
public DocumentBuilder getBuilder() {
return builder;
} public List<User> parseXml(String filepath) throws Exception { document = builder.parse(new InputSource(new FileInputStream(filepath))); List<User> list = new ArrayList<User>(); Element root = document.getDocumentElement(); //从文档根节点获取文档根元素节点root => xml
NodeList childNodes = root.getChildNodes(); for (int i=0; i<childNodes.getLength(); i++) {
Node node = childNodes.item(i); /*
* <person>
<user>
<username>xzc</username>
<password>sdf23223</password>
<birthday>2012-01-23</birthday>
</user>
<user>
<username>误闯</username>
<password>wuchuang3223</password>
<birthday>2002-01-03</birthday>
</user>
</person>
*/
if ("person".equals(node.getNodeName())) { NodeList pChildNodes = node.getChildNodes(); for (int t=0; t<pChildNodes.getLength(); t++) { Node nd = pChildNodes.item(t); if (nd.getNodeType() == Node.ELEMENT_NODE && nd.getNodeName().equals("user")) { User user = new User(); NodeList userChildNodes = nd.getChildNodes(); for (int k=0; k<userChildNodes.getLength(); k++) {
Node userNode = userChildNodes.item(k);
String nodeName = userNode.getNodeName();
String nodeValue = userNode.getTextContent();
System.out.println("nodeType=" + userNode.getNodeType() + ", nodeName=" + nodeName + ", nodeValue=" + nodeValue); if ("username".equals(nodeName))
user.setUsername(nodeValue);
if ("password".equals(nodeName))
user.setPassword(nodeValue);
if ("birthday".equals(nodeName))
user.setBirthday(nodeValue);
}
list.add(user);
} // 若当前节点是user
}
} // 若当前元素是person的处理逻辑
}// 完成对根元素的所有子节点的判断 return list;
} public static void main(String[] args) { try {
DomUtil domUtil = new DomUtil();
List<User> users = domUtil.parseXml("src/sax/parsing/user/jdbc-params.xml"); for(User user : users) {
System.out.println(user);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} 输出结果:
nodeType=3, nodeName=#text, nodeValue= ###此处是Text节点的值(换行+3个制表符)
nodeType=1, nodeName=username, nodeValue=xzc
nodeType=3, nodeName=#text, nodeValue=
nodeType=1, nodeName=password, nodeValue=sdf23223
nodeType=3, nodeName=#text, nodeValue=
nodeType=1, nodeName=birthday, nodeValue=2012-01-23
nodeType=3, nodeName=#text, nodeValue=
nodeType=3, nodeName=#text, nodeValue=
nodeType=1, nodeName=username, nodeValue=误闯
nodeType=3, nodeName=#text, nodeValue=
nodeType=1, nodeName=password, nodeValue=wuchuang3223
nodeType=3, nodeName=#text, nodeValue=
nodeType=1, nodeName=birthday, nodeValue=2002-01-03
nodeType=3, nodeName=#text, nodeValue=
username = xzc, password = sdf23223, birthday = 2012-01-23
username = 误闯, password = wuchuang3223, birthday = 2002-01-03
采用SAX解析XML文件内容到User对象
package sax.parsing.user; import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class SaxUtil extends DefaultHandler { private List<User> users = new ArrayList<User>();
private User user;
private String content; @Override
public void characters(char [] ch, int start, int length) throws SAXException {
content = new String(ch, start, length);
} /**
* xmlns:prefix=uri
* qName, prefix:localName
* @param uri
* The Namespace URI, or the empty string if the element has no Namespace URI
* or if Namespaceprocessing is not being performed.
* 如果元素没有命名空间URI、命名空间处理未被开启,则为空字符串
* @param localName
* The local name (without prefix),
* or the empty string if Namespace processing is not being performed.
* 不带前缀的本地名,如果命名空间处理未被开启,则为空字符串
* @param qName
* The qualified name (with prefix),
* or the empty string if qualified names are not available.
* 带前缀的全限定名,如果限定名不可得到,则为空串
* @param attributes
* The attributes attached to the element.
* If there are no attributes, it shall be an empty Attributes object.
* 附加在该元素上的属性,如果元素没有属性,则为空的Attributes对象
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("user".equals(localName)) {
user = new User();
System.out.println("### " + localName);
System.out.println("<" + qName + ">");
}
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException { if ("username".equals(localName))
user.setUsername(content); if ("password".equals(localName))
user.setPassword(content); if ("birthday".equals(localName))
user.setBirthday(content); if ("user".equals(localName))
users.add(user);
} public List<User> getUsers() {
return users;
} public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true); //设置启用命名空间,这样localName才可用
SAXParser parser = parserFactory.newSAXParser(); SaxUtil saxUtil = new SaxUtil(); parser.parse(new File("src/sax/parsing/user/jdbc-params.xml"), saxUtil);
List<User> userlist = saxUtil.getUsers(); for (User user : userlist)
System.out.println(user);
} } 输出结果:
### user
<u:user>
### user
<u:user>
username = xzc, password = sdf23223, birthday = 2012-01-23
username = 误闯, password = wuchuang3223, birthday = 2002-01-03
该实验例子摘自: http://toreking.iteye.com/blog/1669645
解析XML内容到User对象的更多相关文章
- Dom4j解析xml内容——(三)
Dom4j取标签中的内容用 getText ,取开始标签和结束标签之间的值. 取属性值有两种方式:
- 解析XML字符串为json对象
var overtime='<?xml version="1.0" encoding="UTF-8"?><response><co ...
- C# xml压缩包不解压的情况下解析xml内容
string sourceFilePath = @"E:\文件拷贝\xx\3773\3773.zip"; FileInfo fileInfo = new FileInfo(sour ...
- 用js(JavaScript-jQuery)解析XML文件 无法成功 获得XML对象,字符串一些心得
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/7822962.html 解析XML文件遇到的问题 今天秦博士叫我解析一下XML文件,将里面的所有 ...
- Android解析xml文件-采用DOM,PULL,SAX三种方法解析
解析如下xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <perso ...
- 用js解析XML文件,字符串一些心得
解析XML文件遇到的问题 今天秦博士叫我解析一下XML文件,将里面的所有的X坐标Y坐标放在一个数组里面然后写在文档里让他进行算法比对,大家都知道了啦,解析XML文件获取里面的坐标数据什么的,当然是用前 ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
- python开发_xml.dom_解析XML文档_完整版_博主推荐
在阅读之前,你需要了解一些xml.dom的一些理论知识,在这里你可以对xml.dom有一定的了解,如果你阅读完之后. 下面是我做的demo 运行效果: 解析的XML文件位置:c:\\test\\hon ...
随机推荐
- 跟阿根一起学Java Web开发二:使用Ajax技术及XML与JSON实现输出
如今B/S结构的系统使用Ajax技术是再平常只是的了.今天我们就来探讨下在JSPGenSDF第四版中:怎样使用Ajax技术.怎样输出XML文件及JSON格式数据输出. 怎样搭建一个最基础的JSPGen ...
- Leetcode884.Uncommon Words from Two Sentences两句话中的不常见单词
给定两个句子 A 和 B . (句子是一串由空格分隔的单词.每个单词仅由小写字母组成.) 如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的. 返回所有不常用单 ...
- 本地 vs. 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛
摘要: 本地大数据服务是否进入消失倒计时?云平台大数据服务最终到底会趋向多云.混合云还是单一公有云?集群规模增大,上云成本将难以承受是误区还是事实?InfoQ 将就上述问题对阿里云智能通用计算平台负责 ...
- 【JZOJ4784】【NOIP2016提高A组模拟9.15】Map
题目描述 输入 输出 样例输入 4 4 2 1 2 2 3 3 2 3 4 1 2 1 4 样例输出 14 数据范围 样例解释 upd:保证原图连通. "不相交路径"的定义为不存在 ...
- springboot(十九)使用actuator监控应用【转】【补】
springboot(十九)使用actuator监控应用 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的 ...
- oracle 共享服务器监控
1. 观察sga的使用情况 select * from v$sgastat where pool=’large pool’; 2. 观察调度程序是否充足: 首先看每个调度程序的忙闲: sele ...
- RNN与 LSTM 网络
循环神经网络(RNN) 人们的每次思考并不都是从零开始的.比如说你在阅读这篇文章时,你基于对前面的文字的理解来理解你目前阅读到的文字,而不是每读到一个文字时,都抛弃掉前面的思考,从头开始.你的记忆是有 ...
- shell学习(21)- tr
Linux tr 命令用于转换或删除文件中的字符. tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备. 在tr中利用集合的概念,可以轻松地将字符从一个集合映射到另一个集合中 ...
- 【JZOJ4817】【NOIP2016提高A组五校联考4】square
题目描述 输入 输出 样例输入 3 4 1 1 0 1 0 1 1 0 0 1 1 0 5 1 1 2 3 2 1 3 2 3 2 3 4 1 1 3 4 1 2 3 4 样例输出 1 1 1 2 2 ...
- AT2346 No Need
atcoder上的题目 链接 一道思维题目 可以发现如果X是可有可无的,那么所有小于X的数也一定是可有可无的, 所有我们只要找出最大的那个可有可无的数字就好了 进一步分析,发现 若A1, A2, . ...