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)的更多相关文章

  1. Java XML DOM解析范例源码

    下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...

  2. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  3. XML文件解析DOM解析和SAX解析

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

  4. 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 ...

  5. 使用jaxp对比xml进行DOM解析

    /*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...

  6. xml它解析----DOM解析

    DOM模型(documentobject model) •DOM解析器在解析XML文档时,会把文档中的全部元素,依照其出现的层次关系.解析成一个个Node对象(节点). •在dom中.节点之间关系例如 ...

  7. XML之DOM解析模型

    <?xml version= "1.0" encoding = "UTF-8"> <articles> <article cate ...

  8. mybatis源码-解析配置文件(一)之XML的DOM解析方式

    目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...

  9. Android中XML解析-Dom解析

    Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...

  10. java解析XML之DOM解析和SAX解析(包含CDATA的问题)

    Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...

随机推荐

  1. Zigzag数组 -- 面试宝典

    最近在看面试宝典,其中看到一个题目说:输入一个正整数n,输出它的zigzag数组. 分析:书上给出了数学方面的思考然后给了代码.但是我感觉如果真是面试或者考试遇到的话,我这种笨脑袋肯定是想不出来的,因 ...

  2. Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts

    Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts 题意:给一个长度为\(n\)的排列,每次可以向右循环移位一次,计算\(\sum_{i= ...

  3. YUY格式

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  4. 发布windows服务的批处理

    安装bat: C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe WatchWinService.exe pause 卸载bat ...

  5. MySQL-based databases CVE -2016-6663 本地提权

    @date: 2016/11/3 @author: dlive 0x01 漏洞原文 翻译水平不高求轻喷 感觉作者在写文章的时候有些地方描述的也不是特别清楚,不过结合poc可以清晰理解漏洞利用过程 0x ...

  6. Application binary interface and method of interfacing binary application program to digital computer

    An application binary interface includes linkage structures for interfacing a binary application pro ...

  7. 转 Scrapy笔记(5)- Item详解

    Item是保存结构数据的地方,Scrapy可以将解析结果以字典形式返回,但是Python中字典缺少结构,在大型爬虫系统中很不方便. Item提供了类字典的API,并且可以很方便的声明字段,很多Scra ...

  8. vue学习之环境配置

    最近在学习vue,就顺手记录一下... 1. 安装 nodejs https://nodejs.org   -->注:安装LTS的(LTS为长期稳定版本) 在cmd中输入 node -v 如果显 ...

  9. 如何在natTable表格上添加双击事件

    在项目当中,有时候需要双击表格中的某一行触发一个事件或者一次数据请求,这时候,我们就需要在表格中绑定相关事件,思路实际上很简单,添加一个绑定事件就ok了,那么怎么添加呢?简单实现如下: 1.创建绑定双 ...

  10. create-react-app创建项目后运行npm run eject命令报错解决办法

    最近在用create-react-app创建项目,因要配置各种组件,比如babel,antd等, 需要运行npm run eject命令把项目的配置文件暴露出来,但是还是一如既然碰到报错,因为是在本地 ...