XML解析的知识点

文章目录

    • 什么是xml文件,xml文件特点?
    • 什么叫做XML解析?
    • 如何获取properites文件?

什么是xml文件,xml文件特点?

xml介绍:

xml(extensible markup language)扩展标记语言。用来描述数据。xml中标记是自定义,

它使用DTD或者schema来描述数据。

总结:xml用来组织,存储和发送信息的。

DTD:(文档类型定义)规定了xml数据包含了什么内容和内容的格式。

schema:替代DTD,描述xml文档结构。

rss:(really simple jkndiction) 是一种用来发布和捕获网络内容(标题,内容)的xml格式。

使用rss阅读器来阅读。

什么叫做XML解析?

(一)XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。

XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。
其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。

(二)比较总结XML中几种解析方式
  DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J(由外到内解析)。
JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。
SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中;由上往下解析)。

如何获取properites文件?

方式一

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class xmlDemo {
	public static void main(String[] args) throws DocumentException {
		InputStream in = xmlDemo.class.getResourceAsStream("students.xml");
		SAXReader sa = new SAXReader();
		Document doc = sa.read(in);
		List selectNodes = doc.selectNodes("/students/student");//1,获取相对应的 dom节点
		//2,进行遍历查找节点
		for (Element eleNode : selectNodes) {
			if(eleNode.attributeValue("sid").equals("s003")) {//3,找到sid为s003的节点后就可以获取name的getText();
				String text = eleNode.selectSingleNode("name").getText();
				System.out.println(text);
			}
		}
	}
}

方式二

public class xmlDemo {
	public static void main(String[] args) throws DocumentException {
		InputStream in = xmlDemo.class.getResourceAsStream("students.xml");//根据本地类确定XML,获取流
		SAXReader sa = new SAXReader();//实列化一个SAXReader
		Document doc = sa.read(in);//使用dom4j的SAXReader来读取流
		Node selNode = doc.selectSingleNode("/students/student[@sid='s003']");//直接找到student的sid属性中为s003的student
		System.out.println(selNode.selectSingleNode("name").getText());//打印student中的name元素里面的文本内容
	}
}

你可能感兴趣的:(.XML)