一、DOM 解析

思路:获得Document对象,遍历其中节点获得需要的内容

要点:

Document :  DocuemntBuilderFactory --newDocumentBuilder --parse(xml文件输入流)

根节点: getDocumentElement()

子节点 :NodeLIst list=root.getChildNodes();  Node n=list.item(index);

属性: element.getAttribute("id")  或者 node.getAttributes().getNamedItem("XXX").getNodeValue();

文本:node.getTextContent();  或者 node.getNodeValue();

部分代码:

         //1.  建立一个解析器工厂:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2. 获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3. 将xml文件加载到内存中,得到表示整个文档的Document对象
InputStream inStream=DomParser.class.getClassLoader().getResourceAsStream("book.xml");
Document doc=db.parse(inStream);
//4. 根据标签名获得对应的Node集合
NodeList bookList=doc.getElementsByTagName("book");
//5. 对集合进行遍历
for(int i=0;i<bookList.getLength();i++){
Book book=new Book();
Element ele=(Element)bookList.item(i);//取出当前节点
String id=ele.getAttribute("id");//根据属性名获得属性值
book.setId(id);
Node nameNode=ele.getElementsByTagName("name").item(0);//获取唯一的name节点
String name=nameNode.getFirstChild().getNodeValue();//获得文本值
book.setName(name);
Node authorNode=ele.getElementsByTagName("author").item(0);//获取唯一的author节点
String author=authorNode.getFirstChild().getNodeValue();//获得文本值
book.setAuthor(author);
resultMap.put(book.getId(), book);

二、SAX解析

思路:获得SAXParser,调用parser 方法

要点:

工厂获得实例:SAXParserFactory — newSAXParser

parser.parse(input, handler); 该方法有两个参数,前一个是文件或者输入流,后一个是事件监听器(助手类)

新建助手类 继承 DefaultHandler ,重写需要的方法

部分代码:

 SaxParser:
//1. 将xml文件加载到内存中,得到表示整个文档的Document对象
InputStream inStream=DomParser.class.getClassLoader().getResourceAsStream("book.xml");
//2. 创建Sax解析工厂类
SAXParserFactory factory=SAXParserFactory.newInstance();
//3. 得的Sax解析器
SAXParser parser=factory.newSAXParser();
//4. 创建助手类的实例
SaxHandler handler=new SaxHandler();
//5. 解析文件
parser.parse(inStream, handler);
//6. 获得解析结果
List<Book> result=handler.getResultList();
for(Book b:result){
System.out.println(b);
}

事件监听器类(助手类):

在控制台打印信息,同时将信息封装入LIst

 public class MyDefaultHandler extends DefaultHandler{
List<Student> list=new ArrayList();
Student s=null; private String value;
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.print("文档解析开始"); } @Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("\n文档解析结束");
System.out.println(list.toString());
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { if("student".equals(qName)){
System.out.println("\n学生信息:");
s=new Student();
s.setId(Integer.parseInt(attributes.getValue(0)));
}
if("name".equals(qName)){
System.out.print("姓名:"); }
if("telephone".equals(qName)){
System.out.print("电话:"); }
if("addrs".equals(qName)){
System.out.print("地址:"); }
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print(" ");
if("student".equals(qName)){
list.add(s);
} if("name".equals(qName)){
s.setName(value);
}
if("telephone".equals(qName)){
s.setTelephone(value);
}
if("addrs".equals(qName)){
s.setAddr(value);
} } @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
value=new String(ch, start,length).trim();
System.out.print(value); }

XML文件的解析—DOM、SAX的更多相关文章

  1. 解析XML文件之使用DOM解析器

    在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...

  2. Java是如何解析xml文件的(DOM)

    Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...

  3. 用SAX和PULL进行XML文件的解析与生成

    XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...

  4. Android XML文档解析(一)——SAX解析

    ---------------------------------------------------------------------------------------------------- ...

  5. [置顶] Android开发之XML文件的解析

    Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...

  6. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  7. JDOM方法实现对XML文件的解析

    首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...

  8. xml文件的解析

    1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...

  9. 类的反射及xml文件的解析

    类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...

随机推荐

  1. Nginx之 try_files 指令

    location / { try_files $uri $uri/ /index.php; } 当用户请求 http://localhost/example 时,这里的 $uri 就是 /exampl ...

  2. ActiveMq Windows 配置优化

    最近ActiveMQ 5.15.3 会报 OutofMemory的错误 在 wrapper.conf中 #wrapper.java.additional.8=-Dorg.apache.activemq ...

  3. paramiko

    http://www.cnblogs.com/wupeiqi/articles/5095821.html

  4. UI测试和GUI测试的区别

    UI 测试 包含GUI测试和command line 测试 分享连接 https://www.ranorex.com/resources/testing-wiki/gui-testing/

  5. xshell下mysql数据库只导出表结构不导出数据

    操作系统:linux: 使用软件:xshell.winscp 进入系统之后输入命令: mysqldump -u 用户名 - p 密码 -d 数据库名 > aaa.sql 注意字符间的空格. 之后 ...

  6. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1

    [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1 有了安装Jira的经验, 这次再安装conflue ...

  7. python入门(十七)python连接mysql数据库

    mysql 数据库:关系型数据库mysql:互联网公司 sqllite:小型数据库,占用资源少,手机里面使用oracle:银行.保险.以前外企.sybase:银行+通信 互联网公司key:valuem ...

  8. python 练习题(1-15)

    1.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 2.生成双色球 3.逻辑运算(运算符优先级) 4.输入一个整数,判断这个数是几位数 5.用while循环计算 1-2+3-4...-9 ...

  9. IIS启动应用程序池报错"服务无法在此时接受控制信息"

    用管理员方式打开命令行 输入命令netsh winsock reset 这个命令在百科上的解释是 netsh winsock reset命令,作用是重置 Winsock 目录.如果一台机器上的Wins ...

  10. 【题解二连发】Construct Binary Tree from Inorder and Postorder Traversal & Construct Binary Tree from Preorder and Inorder Traversal

    LeetCode 原题链接 Construct Binary Tree from Inorder and Postorder Traversal - LeetCode Construct Binary ...