Java实现解析并生成xml原理实例详解

XML解析:

  • * 解析xml可以做:
  • * 如果xml作为配置文件:读取
  • * 如果xml作为传输文件:写,读

xml解析思想:

  • * DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象。
  • * 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查。
  • * 缺点:dom树非常占内存,解析速度慢。

Document
Element
Text
Attribute
Comment

* SAX:逐行读取,基于事件驱动
* 优点:不占内存,速度快
* 缺点:只能读取,不能回写

xml常用的解析器:

  • * JAXP:sun公司提供的解析。支持dom和sax。(不常用)
  • * JDOM:
  • * DOM4J:dom for java民间方式,但是是事实方式。非常好。 支持dom

1.导入jar包 dom4j.jar

2.创建解析器

SAXReader reader = new SAXReader();

3.解析xml 获得document对象

Document document = reader.read(url);

  • * XPATH:专门用于查询
  • * 定义了一种规则。
  • * 使用的方法:
  • * selectSingleNode():
  • * selectNodes():

使用步骤:

1、注意:要导包 jaxen...jar

2、创建解析器

SAXReader reader = new SAXReader();

3、解析xml 获得document对象

Document document = reader.read(url);

* 解析XML:

// 1、得到某个具体的节点内容:第2本书的书名--》葵花宝典

// 2、遍历所有元素节点

XPath:

  • // nodename 选取此节点。
  • // / 从根节点选取。
  • // // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
  • // .. 选取当前节点的父节点。
  • // @ 选取属性。
  • // [@属性名] 属性过滤
  • // [标签名] 子元素过滤

例子:

/* demo.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book name="Harry Potter">
    <author>J.K. Rowling</author>
    <price>29.90$</price>
  </book>
  <book name="冰与火之歌">
    <author>马丁</author>
    <price>28.90$</price>
  </book>
</books>
*/
@Test
public void test1() throws DocumentException{
  SAXReader reader = new SAXReader();
  Document doc = reader.read("./src/demo.xml");
  Element root = doc.getRootElement();
  Element book1 = root.element("book");
  System.out.println(book1.getPath());
  System.out.println(book1.elementText("price"));
  List<?> list = root.elements("book");
  Element book2 = (Element) list.get(1);
  System.out.println(book2.attributeValue("name"));
  for(Iterator<?> it = book1.elementIterator();it.hasNext() ; ){
    Element ele = (Element) it.next();
    System.out.println(ele.getName()+" : "+ele.getText());
  }
}

@Test
public void test2() throws Exception{//使用 XPath,只用于快速查询,需要用jaxen...jar包
  SAXReader reader = new SAXReader();
  Document doc = reader.read(new File("src/demo.xml"));
  Node node = doc.selectSingleNode("/books/book[2]/author");//需要jaxen.jar包
  String s = node.getText();
  System.out.println(s);
  node = doc.selectSingleNode("/books/book[2]/@name");
  s = node.getText();
  System.out.println(s);

  List<Node> booknames = doc.selectNodes("/books//@name");
  for (Node node1 : booknames) {
    System.out.println(node1.getText());
  }

  List<?> nodes = doc.selectNodes("/books/*/*");
  for (int i=0; i<nodes.size(); ++i){
    Node node1 = (Node) nodes.get(i);
    System.out.println(node1.getName() + ": " + node1.getText());
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java生成和解析XML格式文件和字符串的实例代码

    1.基础知识: Java解析XML一般有四种方法:DOM.SAX.JDOM.DOM4J. 2.使用介绍 1).DOM (1)简介 由W3C(org.w3c.dom)提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作.优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作:缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理. (2)示例代码: 复制代码 代码如下: <?xml version="1.0&quo

  • 通过实例学习JAVA对象转成XML输出

    一.总体说明 XML和JSON 是最为常用的数据交换格式 本例子演示如何将java对象,转成XML输出. 二.流程 1.在上文的例子中,创建一个包"com.waylau.rest.bean" 2.在该包下创建一个JAVA类"User" package com.waylau.rest.bean; import javax.xml.bind.annotation.XmlRootElement; /* * * 用户 bean * @author waylau.com *

  • java中利用Dom4j解析和生成XML文档

    一.前言 dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异.功能强大.和非常方便使用的特点.   另外xml经常用于数据交换的载体,像调用webservice传递的参数,以及数据做同步操作等等,   所以使用dom4j解析xml是非常有必要的. 二.准备条件 dom4j.jar 下载地址:http://sourceforge.net/projects/dom4j/ 三.使用Dom4j实战 1.解析xml文档 实现思路: <1>根据读取的xml路径,传递给SAX

  • java中四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SAX:http://sourceforge.net/projects/sax/ JDOM:http://jdom.org/downloads/index.html DOM4J:http://sourceforge.net/projects/dom4j/  一.介绍及优缺点分析

  • java 中maven pom.xml文件教程详解

    maven pom.xml文件教程详解,具体内容如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.x

  • java实现Xml与json之间的相互转换操作示例

    本文实例讲述了java实现Xml与json之间的相互转换操作.分享给大家供大家参考,具体如下: 旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exercise.xml; import net.sf.json.JSON; import net.sf.json.JSONSerializer; import net.sf.json.xml.XMLSerial

  • java使用dom4j生成与解析xml文档的方法示例

    本文实例讲述了java使用dom4j生成与解析xml文档的方法.分享给大家供大家参考,具体如下: xml是一种新的数据格式,主要用于数据交换.我们所用的框架都有涉及到xml.因此解析或生成xml对程序员也是一个技术难点.这里就用dom4j来生成一个文档,需要注意的是每个xml文档只有一个根节点. package org.lxh; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutput

  • Java实现解析并生成xml原理实例详解

    XML解析: * 解析xml可以做: * 如果xml作为配置文件:读取 * 如果xml作为传输文件:写,读 xml解析思想: * DOM:将文档加载进内存,形成一颗dom树(document对象),将文档的各个组成部分封装为一些对象. * 优点:因为,在内存中会形成dom树,可以对dom树进行增删改查. * 缺点:dom树非常占内存,解析速度慢. Document Element Text Attribute Comment * SAX:逐行读取,基于事件驱动 * 优点:不占内存,速度快 * 缺

  • asp.net类序列化生成xml文件实例详解

    本文实例讲述了asp.net类序列化生成xml文件的方法.分享给大家供大家参考,具体如下: 根据设计的需求需要开发多个商品的API 原XML文件如下: <urlset> <url> <loc>http://www.xxxxx.com/todaydetials.aspx?id=143</loc> <data> <display> <website>爱购114</website> <siteurl>ht

  • JavaScript解析机制与闭包原理实例详解

    本文实例讲述了JavaScript解析机制与闭包原理.分享给大家供大家参考,具体如下: js解析机制: js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{ } 在扫描js代码时会把: 1.用声明的方式创建的函数的名字; 2.用var定义的变量的名字存到这个词法环境中; 3.同名的时候:函数声明会覆盖变量,下面的函数声明会覆盖上面的同名函数; 4.函数的值为:对函数的一个引用; 变量的值为undefined; 5.如果用函数表达式的方式创建一个函数: va

  • Java CAS底层实现原理实例详解

    这篇文章主要介绍了Java CAS底层实现原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.CAS(compareAndSwap)的概念 CAS,全称Compare And Swap(比较与交换),解决多线程并行情况下使用锁造成性能损耗的一种机制. CAS(V, A, B),V为内存地址.A为预期原值,B为新值.如果内存地址的值与预期原值相匹配,那么将该位置值更新为新值.否则,说明已经被其他线程更新,处理器不做任何操作:无论哪种情

  • java 中HttpClient传输xml字符串实例详解

    java 中HttpClient传输xml字符串实例详解 介绍:我现在有一个对象page,需要将page对象转换为xml格式并以binary方式传输到服务端 其中涉及到的技术点有: 1.对象转xml流 2.输出流转输入流 3.httpClient发送二进制流数据 POM文件依赖配置 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifact

  • Java包装类的缓存机制原理实例详解

    这篇文章主要介绍了Java包装类的缓存机制原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java 包装类的缓存机制,是在Java 5中引入的一个有助于节省内存.提高性能的功能,只有在自动装箱时有效 Integer包装类 举个栗子: Integer a = 127; Integer b = 127; System.out.println(a == b); 这段代码输出的结果为true 使用自动装箱将基本类型转为封装类对象这个过程其实

  • FasfDFS整合Java实现文件上传下载功能实例详解

    在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

  • java 中 String format 和Math类实例详解

    java 中 String format 和Math类实例详解 java字符串格式化输出 @Test public void test() { // TODO Auto-generated method stub //可用printf(); System.out.println(String.format("I am %s", "jj")); //%s字符串 System.out.println(String.format("首字母是 %c",

  • java开发分布式服务框架Dubbo原理机制详解

    目录 前言 Dubbo框架有以下部件 Consumer Provider Registry Monitor Container 架构 高可用性 框架设计 服务暴露过程 服务消费过程 前言 在介绍Dubbo之前先了解一下基本概念: Dubbo是一个RPC框架,RPC,即Remote Procedure Call(远程过程调用),相对的就是本地过程调用,在分布式架构之前的单体应用架构和垂直应用架构运用的都是本地过程调用.它允许程序调用另外一个地址空间(通常是网络共享的另外一台机器)的过程或函数,并且

  • Java使用AES加密和解密的实例详解

    Java使用AES加密和解密的实例详解 前言: AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128.192.256,分组长度128位,算法应易于各种硬件和软件实现.1998年NIST开始AES第一轮分析.测试和征集,共产生了15个候选算法.1999年3月完成了第二轮AES2的分析.测试.2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES. 在应用方面,尽管DES在安全上

随机推荐