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="/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解析(l.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.*; 基于DOM解析
*l.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= wInstance();
//创建⽂档解析器对象
DocumentBuilder wDocumentBuilder();
//开始解析XML⽂件
String path=Thread.currentThread().getContextClassLoader().getResource("l").toURI().getPath();        Document document =builder.parse(new File(path));//dom树,在内存中⽣成了⼀颗dom树
//获取根元素
Node FirstChild();
//获取根元素的名字
System.out.NodeName());
//通过根元素获取其他元素
Node ElementsByTagName("driver").item(0);
String driver =TextContent();
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("l").toURI().getPath();        Document document= ad(new File(path));
//获取根元素
Element RootElement();
//System.out.Name());
//获取driver元素
Element driverElement =rootElement.element("driver");
//在获取⽂本
String Text();
//System.out.println(driver);
//直接获取元素的⽂本内容
driver=rootElement.elementText("driver");
java xml是什么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= ateDocument();
//添加根元素
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= atePrettyPrint();
format.setEncoding("utf-8");
String path="l";
XMLWriter xmlWriter=new XMLWriter(new FileWriter(new File(path)),format);
xmlWriter.write(document);
xmlWriter.close();
}
}
最终⽣成的xml⽂件
总结
本篇⽂章就到这⾥了,希望能给你带来帮助,也希望你能够多多关注的更多内容!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。