1. 解析XML的方式有两种

  dom:Document Object Model文档对象模型,是w3c组织推荐的解析方式

  sax:Simple Api XML不是官方标准,但它是XML社区实际上的标准,几乎所有的XML解析器都支持它

区别:

  dom需要读取整个XML文档,在内存中构建代表这个DOM树的Document对象,然后再对XML文档进行操作;

  SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个XML文档装载完才会对文档进行操作。

2. XML解析开发包

2.1  JAXP开发包

  JAXP开发包是JavaSE的一部分,由 javax.xml   org.w3c.dom   org.xml.sax 及其子包组成。

(1)DOM方式

  • 遍历所有节点
  • 查找某一个节点
  • 删除结点
  • 更新结点
  • 添加节点
    //1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2.得到dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();//Add Exception
//3.解析xml文档,得到代表文档的document
Document document = builder.parse("src/book.xml");    //4.对xml文档进行操作
NodeList list = document.getElementsByTagName("书名");
Node bookNameNode = list.item(0);
String content = bookNameNode.getTextContent();
System.out.println(content);

(2)SAX方式

SAX采用事件处理的方式解析文件,涉及两个部分:解析器和事件处理器。创建出解析器后,就可以采用SAX方式解析XML文档,只要解析到文档的一个组成部分,都会调用事件处理器的一个方法,并把当前解析到的xml内容作为方法的参数传递给事件处理器。事件处理器由开发者编写自己的业务逻辑。

sax解析例子

 public class Demo1 {

     /**
* @throws SAXException
* @throws ParserConfigurationException
* @throws IOException
*/
public static void main(String[] args) throws ParserConfigurationException,
SAXException, IOException { // 1.创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance(); // 2.得到解析器
SAXParser sp = factory.newSAXParser(); // 3.得到读取器
XMLReader xmlReader = sp.getXMLReader(); // 4.设置内容处理器
xmlReader.setContentHandler(new ListHandler()); // 5.读取xml文档内容
xmlReader.parse("src/book.xml");
} } // 得到文档的所有内容
class ListHandler implements ContentHandler { @Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub } @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub } @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub } @Override
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub } @Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub } @Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.println("<" + qName + ">"); for(int i=0; atts!=null && i<atts.getLength(); i++){
String name = atts.getQName(i);
String value = atts.getValue(i);
System.out.println("(" +name+ "=" +value+ ")");
}
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("</" + qName + ">"); } @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch, start, length)); } @Override
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub } @Override
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub } @Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub } }

更新XML文档例子

    //将更改后的内存document写入xml文档
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream("src/book2.xml")));

2.2 Dom4j开发包

dom4j是简单灵活的开源库,性能优异、功能强大、容易使用,不仅hibernate在用,连sun公司自己都在用。

//DOM4j中,获得Document对象的方式有三种:
//1.读取XML文件,获得document对象            
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml")); //2.解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text); //3.主动创建document对象.
Document document = DocumentHelper.createDocument();
//创建根节点
Element root = document.addElement("members");
//Document对象写入xml文件中
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312"); XMLWriter xw = new XMLWriter(new FileOutputStream("src/book.xml"),format);
xw.write(document);
xw.close();

【javaweb学习】解析XML的更多相关文章

  1. JavaWeb学习——web.xml文件说明

    JavaWeb学习——web.xml文件说明 摘要:本文主要学习了web.xml文件的作用以及如果配置. 是什么 web.xml文件是用来在JavaWeb项目里面初始化配置信息的,比如:访问的首页.S ...

  2. JavaWeb学习笔记——XML解析

    DOM解析操作 只在跟节点<addresslist>下面建立一个子节点<name> <?xml version="1.0" encoding=&quo ...

  3. JavaWeb学习日记----XML的解析

    XML的解析简介: 在学习JavaScript时,我们用的DOM来解析HEML文档,根据HTML的层级结构在内存中分配一个树形结构,把HTML的标签啊,属性啊和文本之类的都封装成对象. 比如:docu ...

  4. JavaWeb学习日记----XML基础

    1.XML基础: XML全称为eXtensible Markup Language;即可扩展标记型语言,同HTML一样使用标签来操作.它的可扩展性体现在标签可以由自己定义,可以是中文标签. XML用途 ...

  5. 【javaweb学习】XML和约束模式

    xml:可扩展标记语言,w3c组织发布的,用于保存有关系的数据,作为配置文件,描述程序模块之间的关系 <?xml version="1.0" encoding="g ...

  6. javaweb dom4j解析xml文档

    1.什么是dom4j dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它 ...

  7. JavaWeb学习笔记——XML和SAX解析区别

  8. go 语言学习 ---解析xml

    实例1 //main package main import ( "bytes" "encoding/xml" "fmt" "io ...

  9. JavaWeb学习笔记——XML简介

  10. [android] 采用pull解析xml文件

    /***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...

随机推荐

  1. jstl fortokens 分割字符串

    forTokens标签: forTokens标签用来截取字符串: 属性: * var :定义变量 * items :切分字符串 * begin :从哪开始 * end :到哪结束 * step :步长 ...

  2. C#反射机制 Type类型

    using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System ...

  3. C++ 基础知识复习(二)

    异常处理部分: 23. 在c++的异常处理中,除了提供异常的关键字语法支持以外,其标准库中支持异常处理而封装异常类也很好的为应用程序中异常处理判断使用提供直接的帮助.C++语言中针对异常处理提供了三个 ...

  4. 封装一个mysql类(ggshop)

    接口 abstract class db{ //连接服务器 public abstract function connect($n,$u,$p); //发送查询 protected abstract ...

  5. python学习笔记(2)

    1.for循环 用户按照顺序循环可迭代对象中的内容. li = [11,22,33,44] for i in li: print i for循环的else 此功能目前只有for循环里面有发现. 具体条 ...

  6. thinkphp设置session有效时间

    thinkphp的框架文件 ThinkPHP/Common/functions.php function session(){ 在这个方法中找到 thinkphp .1版 if(isset($name ...

  7. 判断IP地址是否合法类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace IPFl ...

  8. language level in Intellij IDEA

    The Language level setting sets which features the code assistance in the editor should support. For ...

  9. 2016 ccpc 网络选拔赛 F. Robots

    Robots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  10. bzoj4196 [Noi2015]软件包管理器 树链剖分+线段树

    先把树剖分了(又是dfs1.dfs2),然后区间求和.区间覆盖即可 难得的1A好(shui)题 ——写了那么多题,终于有一道是1A的了,加上上一次连续交了几遍A的程序,我的状态莫名好看啊233 总结: ...