解析一个XML文档有哪些内容
解析有:dom和sax两种
dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大
sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会触发一个事件,适合对XML的顺序访问,占用内存资源稍小

Node:
  XML 文档的 documentElement 属性是根节点。
  nodeName 属性是节点的名称。nodeName 是只读的
  元素节点的 nodeName 与标签名相同
  属性节点的 nodeName 是属性的名称
  文本节点的 nodeName 永远是 #text
  文档节点的 nodeName 永远是 #document

  nodeType 属性是节点的类型。
  元素类型 节点类型
    元素 1
    属性 2
    文本 3
    注释 8
    文档 9

nodeValue属性规定节点的值。
元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值

DOM解析:

package com.briup.test3;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
//用递归DOM方法解析
public class DomBookTest {
//获取解析器 将其封装
public static Document getDoc(String filename) throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(filename);
} public static void main(String[] args) throws Exception {
//获取解析地址
Document doc = getDoc("src/com/briup/test3/book.xml");
//输出头部
System.out.println("<? version="+doc.getXmlVersion()+" encoding="+doc.getXmlEncoding()+">");
//获取根节点
Element element = doc.getDocumentElement();
printdoc(element); }
public static void printdoc(Node n){
//获取节点类型
short type = n.getNodeType();
if (type==1) {
//获取节点内容
System.out.print("<"+n.getNodeName()+" ");
//用Map集合存储获取的节点属性
NamedNodeMap map = n.getAttributes();
for (int i = 0; i < map.getLength(); i++) {
Node attr =map.item(i);
System.out.print(attr.getNodeName()+"="+attr.getNodeValue());
}
System.out.print(">");
//获取孩子节点
NodeList list = n.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
printdoc(child);
}
System.out.print("</"+n.getNodeName()+">"); } //获取节点内容
else if(type ==3){
System.err.print(n.getNodeValue()); } } }

SAX解析:

  

package com.briup.test3;

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 SaxBookTest { public static void main(String[] args) throws Exception{
//获取解析器
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
//使用内部类解析文件
parser.parse("src/com/briup/test3/book.xml", new DefaultHandler(){ //解析开始标题文档
public void startDocument() throws SAXException {
System.out.println("<?xml version= 1.0 encoding= utf-8 ?>"); } //解析节点
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
System.out.print("<"+qName+" ");
for (int i = 0; i < attributes.getLength(); i++) {
System.out.print(attributes.getQName(i)+"="+attributes.getValue(i)); }
System.out.print(">");
} @Override
//解析结束
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print("</"+qName+">");
} @Override
//解析内容
public void characters(char[] ch, int start, int length)
throws SAXException {
String string = new String(ch, start, length);
System.out.print(string);
} });
} }

BOOK的XML文档

<?xml version="1.0" encoding="utf-8"?>
<books>
<book bid="1">
<name>java与模式</name>
<price>80</price>
</book>
<book bid="2">
<name>java编程思想</name>
<price>95</price>
</book>
<book bid="3">
<name>疯狂java讲义</name>
<price>90</price>
</book>
</books>

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

  1. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  2. Android解析xml文件-采用DOM,PULL,SAX三种方法解析

    解析如下xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <perso ...

  3. schema文件及XML文件的DOM和Sax解析

    schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ...

  4. xml文件使用DOM解析,报异常org.xml.sax.SAXParseException,"characterEncoding" 的引用必须以 ';' 分隔符结尾异常

    这个异常一般为xml文件对&的报错,只需要将&改为转义后的&amp即可解决

  5. 用JDK自带的包来解析XML文件(DOM+xpath)

    DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom.org.xml.sax 和javax.xml.parsers包就可以满意条件了.(1)org.w3c.do ...

  6. 解析XML的几种方法之SAX解析

    假期总结不能停,坚持坚持....接下来总结一下XMl和json的解析和生成.. 解析XML的四种方法,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址: DOM:在现 ...

  7. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

  8. 解析XML文档之一:使用SAX解析

    使用sax解析xml方法总结 解析的的xml文档格式如下 <?xml version="1.0" encoding = "UTF-8"?> < ...

  9. Android 之XML数据解析(2)—— SAX解析

    (以下文章基本照抄郭霖大神的<第一行代码>) 在Android之 解析XML文件(1)—— Pull解析 中我们讲了Pull方式解析XML文件.今天讲另外一种方式,SAX解析XML文件. ...

  10. C#关于xml文件和TreeView之间的转换解析

    主窗体: using System; using System.Collections; using System.Collections.Generic; using System.Componen ...

随机推荐

  1. 使用Json.Net处理json序列化和反序列化接口或继承类

    以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...

  2. 操作系统双语阅读 - Schedulers调度器2

    Most processes can be described as either I/O bound or CPU bound. 大多数进程都可以描述为IO绑定或者CPU绑定. An I/O-bou ...

  3. PHPCMS V9 学习总结

    在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1]PHPCMS V9系统目录简析 在研究所有问题之前,请先了解一下系统的文件目录结构,具体如下图所示 ...

  4. 各种数据库连接代码(java)

    SqlServer2000 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); URL = "j ...

  5. linux 下安装gsl

    访问 http://ftp.club.cc.cmu.edu/pub/gnu/gsl/下载最新版本的,现在最新的是gsl-1.16.tar.gz,已经是2013年更新的了.然后下载 安装 简便的安装过程 ...

  6. Android中Base64的简单使用

    服务端图片的信息被转化成字符串,传到android客户端,android端需要把这些信息再解码转化成图片并保存在本地. //编码部分 String string = Base64.encodeToSt ...

  7. Redis 转

    Redis 简介 Redis实践 Redis命令总结

  8. [转]Windows配置Git

    原文地址:http://blog.csdn.net/exlsunshine/article/details/18939329 1.从git官网下载windows版本的git:http://git-sc ...

  9. Temporary InMemory Tables [AX 2012]

    Temporary InMemory Tables [AX 2012] This topic has not yet been rated - Rate this topic Updated: Oct ...

  10. Swoole 遇上 PHP会是怎样的结果呢

    一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写 Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪 Swoole是一个php的扩展,它的核心目的就 ...