java解析XML详解

目录
  • XML的主要用途
    • 对比HTML
    • 关于XML文件的解析?
    • JDK自带的一套解析
  • 总结

XML的主要用途

  • --数据存储和数据描述
  • --是一个优良的配置文件
  • --相当于一个小型数据库
  • --XML不依赖于任何一种编程语言,是独立的W3C提供的规范,所以可以完成多种语言之间的数据交换(重点)

XML的语法严格,并且完全区分大小写

  • XML(eXtensible Markup Language)-描述事物本身 .xml

XSL (eXtensible Stylesheet Language)-修饰XML XSL文件也有单独的文件,文件后缀 .xsl

通过以下陈程序引入xsl文件

<?xml-stylesheet type="text/xsl" href="student.xsl"?>

DTD (Docment Type Definition)-约定xml的标签 在XML文件中只能编写那些标签,标签中只能编写那些属性 DTD有单独的文件,文件后缀 .dtd

DTD实例

Schema-约定xml标签和类型,比DTD编写更加方便,(约束XML文件) schema有单独的文件,文件后缀 .xsd/.xml

实例是:

<?xml version="1.0" encoding="gb2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="丛书">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="书">
					<xs:element name="名"  minoccurs="1"></xs:element>
					<xs:element name="人"></xs:element>
					<xs:element name="价">
						<xs:attribute name="unit">
							<xs:enumeration value="RMB"/>
							<xs:enumeration value="美元"/>
							<xs:enumeration value="日元"/>
						</xs:attribute>
					</xs:element>
				</xs:element>
		</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

可以扩展的原因:DTD可以修改

对比HTML

HTML(Hyper Text Markup language

*超文本传输标记语句(程序员不能自己扩展)

*HTML主要用途:做页面展示,不会做数据处理

*语法松散,不区分大小写

CSS

DTD(Doucment Type Defined)约束HTML能有那些标签,标签能有那些属性

schema (DTD的升级版,语法更新一些,和DTD达到同等效果)

不可扩展原因:DTD不可扩展

关于XML文件的解析?

*无论是哪一种编程语言,对XML文件的解析都包括两种方式:

*DOM解析

*SAX解析(org.xml.sax.helps DefaultHandler)

DOM解析

*原理

在开始解析XML文件的时候,将整个XMl文件全部加载到内存中

在内存中编程语言将XML文件映射成一颗DOM树,这颗树就是一个

对象,然后我们对这棵树上的任意节点进行增删改查操作,由于

这棵树全部都在内存上,解析过去的节点可以再次解析,比较灵活。

*优点

灵活,解析过去的节点,可以再次解析

*缺点

如果XML文件比较大,可能会导致内存溢出,即使不导致内存溢出,

也会耗费大量内存,内存少了项目的运行效率自然就降低了。

*什么情况下选择dom解析方式

如果很灵活的操作每一个元素,选用dom解析,但是注意文件需要小一些

SAX解析

*原理

SAX解析是基于事件驱动型的解析方式,他的解析不需要将整个XML文件全部

转载到内存中,解析的时候是有顺序的,在XML文件中从上往下依次解析,遇

到开始标签,表示发生了一个特定的事件,此时执行一段特定的程序,遇到结束

标签表示又发生一个特定事件,此时执行一段特定的程序完成解析。

*优点

不需要转载XML文件,所以不会占用大量内存, 适合大文件

*缺点

解析过去的节点不能重复解析,除非重头开始

*什么情况下选择SAX解析方式

大文件适合使用SAX解析

作为程序员如何解析XML文件,解析XMl文件的开源项目都包括那些?

java解析XML相关的开源项目

*DOM4j(Dom for Java)

*JDOM

.....

JDK自带一套,是实现W3C规范的

*org.w3c.com.*; 基于DOM解析

*org.xml.sax.*; 基于SAX解析

为了提高我们解析XMl文件的效率,还涉及到XPATH。(是一种标签匹配方式,类似于正则表达式,可以让我们程序快速定位XML文件中的标签)

解析XML文件涉及到:

DOM4j/JDOM/W3C+......Xpath

JDK自带的一套解析

首先在src目录下创建一个xml文件

以下为解析过程

/**
 * 使用JDK自带的"Dom解析"XML文件(读)
 */
public class Text04 {
    public static void main(String[] args) throws Exception {
        //创建文档解析器工厂对象
        DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
        //创建文档解析器对象
        DocumentBuilder builder=factory.newDocumentBuilder();
        //开始解析XML文件
        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();
        Document document =builder.parse(new File(path));//dom树,在内存中生成了一颗dom树
        //获取根元素
        Node rootNode=document.getFirstChild();
        //获取根元素的名字
        System.out.println(rootNode.getNodeName());
        //通过根元素获取其他元素
        Node driverNode=document.getElementsByTagName("driver").item(0);
        String driver =driverNode.getTextContent();
        System.out.println(driver);
    }
}

输出结果

使用dom4j开源项目(基于dom解析)解析xml文件(读)

需要将dom4j开源项目的jar包作为目录导入

/**
 * 使用dom4j开源项目解析XML文件(读)
 *
 * 读XML文件
 *
 * DOM4j
 *
 * 基于dom方式
 */
public class Text01 {
    public static void main(String[] args) throws Exception {
        //创建解析器对象
        SAXReader reader=new SAXReader();//虽然使用了SAXReader,但是还是基于DOM的解析方式
        //获取文档对象,还是dom树
        String path=Thread.currentThread().getContextClassLoader().getResource("db-config.xml").toURI().getPath();
        Document document= reader.read(new File(path));
        //获取根元素
        Element rootElement=document.getRootElement();
        //System.out.println(element.getName());
        //获取driver元素
        Element driverElement =rootElement.element("driver");
        //在获取文本
        String driver=driverElement.getText();
        //System.out.println(driver);
        //直接获取元素的文本内容
        driver=rootElement.elementText("driver");
        System.out.println(driver);
        System.out.println(rootElement.elementText("url"));
        System.out.println(rootElement.elementText("user"));
        System.out.println(rootElement.elementText("password"));

    }
}

输出结果

使用dom4j开源项目(基于dom解析)解析xml文件(写)

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
/**
 * 使用dom4j开源项目解析XML文件(写)
 */
public class Text02 {
    public static void main(String[] args) throws Exception {
        //创建文档对象
        Document document= DocumentHelper.createDocument();
        //添加根元素
        Element studentInfoElt=document.addElement("学生信息");
        //给学生信息节点添加子节点学生节点
        Element studentElt=studentInfoElt.addElement("学生");
        //给学生节点添加id属性
        studentElt.addAttribute("id","110");
        //给学生节点添加名字字节点
        Element nameElt=studentElt.addElement("名字");
        //设置名字节点文本
        nameElt.setText("张三");
        //给学生节点添加性别字节点
        Element sexElt=studentElt.addElement("性别");
        //设置名字节点文本
        sexElt.setText("男");
        //开始写
        OutputFormat format= OutputFormat.createPrettyPrint();
        format.setEncoding("utf-8");
        String path="students.xml";
        XMLWriter xmlWriter=new XMLWriter(new FileWriter(new File(path)),format);
        xmlWriter.write(document);
        xmlWriter.close();

    }
}

最终生成的xml文件

总结

本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注我们的更多内容!

(0)

相关推荐

  • java中xml进行报文发送和解析操作

    利用OKhttp网络框架,进行Maven项目管理 //报文发送 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.8.0</version> </dependency> //报文解析 <dependency> <groupId>xom</gr

  • Java代码里如何拼接SQL语句到mybatis的xml

    关键语句: StringBuilder whereSql = new StringBuilder(); whereSql.append("SQL"); 实现类: public List getList(Map<String, Object> map) { List<Map<String, Object>> rs = new ArrayList<Map<String, Object>>(); try { StringBuilde

  • JAVA Web.xml加载顺序过程详解

    web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将<context-param></context-param>转化为键值对,

  • Java解析xml文件遇到特殊符号异常的情况(处理方案)

    在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" 的引用必须以 ';' 分隔符结尾; 我打开xml文件后,发现该"xxx"符号之前跟着一个"&"符号,后来了解到,这类符号在xml里属于一种特殊符号,而特殊符号若没用转义符表示,直接用到xml文件里,就会在使用SAX等方式做解析时出现奇怪的异常. 其实,这都是因为这些特殊字符

  • Java使用SAX解析xml的示例

    一.SAX解析xml简介 SAX是Simple API for Xml的简写,主要功能是用于对xml文档进行解析.由于该方式采用的是事件驱动(callback回调机制)解析方式,所以有速度快.占内存少的优点,当然这些优点也仅限于xml的读取操作,SAX是无法对读取的XML元素进行修改的.如果要修改节点元素则需要使用DOC方式进行将xml文件读取,它会将xml读取成document树结构对象,这样可用对节点元素进行编辑操作:DOC方式的缺点也比较明显:占内存大.解析速度较慢. 所以仅用于读取xml

  • java解析XML详解

    目录 XML的主要用途 对比HTML 关于XML文件的解析? JDK自带的一套解析 总结 XML的主要用途 --数据存储和数据描述 --是一个优良的配置文件 --相当于一个小型数据库 --XML不依赖于任何一种编程语言,是独立的W3C提供的规范,所以可以完成多种语言之间的数据交换(重点) XML的语法严格,并且完全区分大小写 XML(eXtensible Markup Language)-描述事物本身 .xml XSL (eXtensible Stylesheet Language)-修饰XML

  • jQuery解析XML 详解及方法总结

    XML和HTML都是标记语言,语法形式非常相似,同属于一个语言体系.对于HTML的解析,我是使用jQuery非常方便,其实,我们也可以用jquery解析XML,也是同样的方便. 如果你用过Java.PHP等语言解析过XML,相信会跟我有相同的感觉,那就是很麻烦.改用jQuery来读取.分析.操作XML后,给人意想不到的轻松感.下面我们来看看使用jQuery处理XML文件的几种形式方法. 使用JavaScript常规方法解析XML var xmlDoc = request.responseXML;

  • PHP 以POST方式提交XML、获取XML,解析XML详解及实例

    PHP 以POST方式提交XML.获取XML,最后解析XML 以POST方式提交XML // Do a POST $data="<?xml version='1.0' encoding='UTF-8'?> <TypeRsp> <CONNECT_ID>1</CONNECT_ID> <MO_MESSAGE_ID>2</MO_MESSAGE_ID> </TypeRsp>"; //$data = array('

  • Java解析XML(4种方式)案例详解

    目录 1.DOM方式 2.SAX方式 3.JDOM方式 4.DOM4J方式 总结 xml文件 <?xml version="1.0" encoding="utf-8" ?> <class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <nickname>stars1</nicknam

  • Java 利用dom方式读取、创建xml详解及实例代码

    Java 利用dom方式读取.创建xml详解 1.创建一个接口 XmlInterface.Java public interface XmlInterface { /** * 建立XML文档 * @param fileName 文件全路径名称 */ public void createXml(String fileName); /** * 解析XML文档 * @param fileName 文件全路径名称 */ public void parserXml(String fileName); }

  • Android xml解析实例详解

    Android  xml解析实例详解 实现效果图: XmlActivity package com.Android.xiong.gridlayoutTest; import android.app.Activity; import android.content.res.XmlResourceParser; import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; impo

  • web.xml详解_动力节点Java学院整理

    一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首先简单说一下,web.xml的加载过程. 当我们去启动一个WEB项目时,容器包括(JBoss.Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来.   启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: <listener></listener>和<context-param><

  • Android  xml解析实例详解

    Android  xml解析实例详解 实现效果图: XmlActivity package com.Android.xiong.gridlayoutTest; import android.app.Activity; import android.content.res.XmlResourceParser; import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; impo

  • Java反射技术详解及实例解析

    前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了,java反射有个开源框架jOOR相信很多人都用过,不过我们还是要学习反射的基础语法,这样才能自己写出优秀的框架,当然这里所讲的反射技术,是学习Android插件化技术.Hook技术等必不可少的! 一.基本反射技术   1.1 根据一个字符串得到一个类 getClass方法 String nam

  • Java源码解析之详解ImmutableMap

    一.案例场景 遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样-- public static final Map<String,String> dayMap= new HashMap<>(); static { dayMap.put("Monday","今天上英语课"); dayMap.put("Tuesday","今天上语文课"); dayMap.p

随机推荐