Xml解析(Dom解析xml)
xml四种解析方式:
DOM 平台无关的官方解析方式
优点:形成了树结构,直观好理解,代码更易编写
解析过程中树结构保留在内存中,方便修改
缺点:当xml文件较大时,对内存耗费比较大,容易影响解析性能并造成内存溢出
SAX 基于事件驱动的解析方式
优点:采用事件驱动模式,对内存耗费比较小
适用于只需要处理xml中数据时
缺点:不易编码
DOM4J JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能
DOM4J使用接口和抽象基本类方法,是一个优秀的Java XML API
具有性能优异、灵活性好、功能强大和极端易用使用的特点
是一个开放源代码的软件
JDOM 仅使用具体类而不使用接口,API大量使用了Collections类
DOM和SAX是java提供的,不需要额外jar包
DOM4J和JDOM需要额外jar包
DOM
解析:
1、创建一个DocumentBuilderFactory对象
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- 创建一个DocumentBuilder对象
2、创建一个DocumentBuilder对象
- DocumentBuilder db = dbf.newDocumentBuilder();
3、通过DocumentBuilder的parse方法加载xml文件
- Document document = db.parse("/Users/linjian/Documents/workspace/ImmocXml/books.xml");
生成:
1、创建TransformerFactory对象
- TransformerFactory tff = new TransformerFactory();
2、创建Transformer对象
- Transformer tf = ttf.newTransformer();
- tf.transform(new DOMSource(document),new StreamResult(new File("book1.xml")));
dom中父节点和字节点之间的空格属于TEXT_NODE,所以getChildNodes得到的NodeList中包含很多节点名为#text的节点,去除此类节点可以通过NodeType过滤。
节点的值是一个Text的字节点,所以获取节点值需要通过node.getFirstChild().getNodeValue()方法获取节点值;另一种方式是node.getTextContext(),但是这种方式会把字节点的值也获取到
解析book.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <bookstore>
- <book id="1">
- <name>冰与火之歌</name>
- <author>乔治马丁</author>
- <year>2014</year>
- <price>89</price>
- </book>
- <book id="2">
- <name>安徒生童话</name>
- <year>2004</year>
- <price>77</price>
- <language>English</language>
- </book>
- </bookstore>
解析代码DomTest.java:
- package com.immoc.xml;
- import java.io.IOException;
- 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.NamedNodeMap;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.xml.sax.SAXException;
- public class DomTest {
- public static void main(String[] args) {
- // 创建一个DocumentBuilderFactory对象
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- try {
- // 创建一个DocumentBuilder对象
- DocumentBuilder db = dbf.newDocumentBuilder();
- try {
- // 通过DocumentBuilder的parse方法加载book.xml文件到当前项目下
- Document document = db.parse("/Users/linjian/Documents/workspace/ImmocXml/books.xml");
- // 获取book节点的集合
- NodeList booklist = document.getElementsByTagName("book");
- // 遍历每一个book节点,通过NodeList的getLength()方法获取booklist长度
- for (int i = 0; i < booklist.getLength(); i++) {
- // 通过item(i)方法获取一个book节点,nodelist的索引值从0开始
- System.out.println(booklist.item(i).getNodeName());
- Node book = booklist.item(i);
- // 获取book节点的所有属性
- /*
- NamedNodeMap attrs = book.getAttributes();
- for (int j = 0; j < attrs.getLength(); j++) {
- System.out.println("\t" + attrs.item(j).getNodeName() + ":" + attrs.item(j).getNodeValue());
- }
- */
- //获取指定属性
- Element element = (Element) booklist.item(i);
- System.out.println("\tid:"+ element.getAttribute("id"));
- NodeList childnNodeList = book.getChildNodes();
- for (int k = 0; k < childnNodeList.getLength(); k++) {
- Node childNode = childnNodeList.item(k);
- if (childNode.getNodeType() == Node.ELEMENT_NODE) {
- // System.out.println("\t" + childNode.getNodeName() + ":" + childNode.getTextContent());
- System.out.println("\t" + childNode.getNodeName() + ":" + childNode.getFirstChild().getNodeValue());
- }
- }
- System.out.println();
- }
- } catch (SAXException | IOException e) {
- e.printStackTrace();
- }
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- }
- }
- }
Xml解析(Dom解析xml)的更多相关文章
- Java XML DOM解析范例源码
下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- XML文件解析DOM解析和SAX解析
解析一个XML文档有哪些内容解析有:dom和sax两种dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会 ...
- xml语法、DTD约束xml、Schema约束xml、DOM解析xml
今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...
- 使用jaxp对比xml进行DOM解析
/*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...
- xml它解析----DOM解析
DOM模型(documentobject model) •DOM解析器在解析XML文档时,会把文档中的全部元素,依照其出现的层次关系.解析成一个个Node对象(节点). •在dom中.节点之间关系例如 ...
- XML之DOM解析模型
<?xml version= "1.0" encoding = "UTF-8"> <articles> <article cate ...
- mybatis源码-解析配置文件(一)之XML的DOM解析方式
目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...
- Android中XML解析-Dom解析
Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...
- java解析XML之DOM解析和SAX解析(包含CDATA的问题)
Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...
随机推荐
- RocketMQ 源码分析 RouteInfoManager(四)
在上一章分析了NamesrvController的构造函数时,会生成一个RouteInfoManager对象,该对象存放着整个消息集群的相关消息,所以这里单独拿出来分析.其实试想一下namesrv的功 ...
- 【CF Round 439 C. The Intriguing Obsession】
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- bzoj4772 显而易见的数论
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4772 sol :这个题卡了我一整天QAQ 出题人简直丧心病狂,卡内存+卡常数QAQ 题意就是, ...
- javascript传递参数如果是object的话,是按值传递还是按引用传递?
作者:苏墨橘链接:https://www.zhihu.com/question/27114726/answer/35481766来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 《c程序设计语言》-3.2 字符串转换
#include <stdio.h> #define Num 1000 int main() { int i = 0,j,k,count2 = 0; char s[Num] = {'\0' ...
- ubuntu上安装ffmpeg
安装包和主要步骤: 1. 首先安装系统基础环境 RHEL & CentOS 系列:yum install -y automake autoconf libtool gcc gcc-c++ ...
- Java并发容器--ConcurrentLinkedQueue
概述 ConcurrentLinkedQueue是一种基于链表实现的无界非阻塞线程安全队列,遵循先入先出规则. 线程安全队列有两种实现方式: 阻塞方式:对入队和出队操作加锁.阻塞队列. 非阻塞方式:通 ...
- 【Tomcat】Tomcat下设置项目为默认项目
项目的实际使用中经常需要将当前项目设为tomcat的默认项目,而不是进入到tomcat的页面,有几种方法可以实现,注意第二种.第三种情况需要先删除webapps下的ROOT目录,否则会失败. 一. 将 ...
- (转)Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...
- Centos7部署Open-Falcon监控
参考博主:努力哥完成 一.Open-Falcon介绍 1.监控系统,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器.操作系统.中间件.应用进行全面的监控,及报 ...