1、xml主要的解析方式:DOM、SAX和StAX
DOM思想:将整个xml加载到内存中,形成文档对象,所有对xml的操作就是对内存中的文档对象进行操作。另外,DOM是官方通用的xml解析标准;
SAX:来自xml程序员的社区。;
2、程序员为啥要发明SAX?
当xml文件比较大时,不可能将所有的xml文档全部加载到内存。
3、SAX(Simple API for xml)思想:一边解析,一边处理,一边释放资源,-----不允许在内存中存放大规模的xml数据
StAX the stream API for XML-----------xml流API
STAX是一种拉模式 xml解析方式,SAX是一种推模式 xml解析方式
推(push)模式:由服务器主导,向客户端主动发送数据
拉(pull)模式:由客户端主导,向服务器主动申请数据
4、程序员在实际开发过程中,使用已经开发好的工具包----JAXP、DOM4J、XML PULL
5、解析方式与解析开发包的关系:
解析方式是解析xml解析的思想,没有具体代码,解析开发包是解析xml思想具体代码实现。
6、JAXP:是sun官方推出的实现技术, 同时支持DOM SAX STAX
要看详细的解析过程源码,可以参考Java/workspace_myeclipse/day02或者day03
7、DOM4J:是开源社区的开源框架,支持DOM解析
XML PULL:android移动设备内置xml解析技术,支持STAX解析方式。
8、DOM和SAX、STAX的有优缺点:DOM在解析xml数据的时侯,正因为是将整个文档数据加载到内存中的,因此是支持回写的,而SAX和STAX虽然性能高,
但是不支持回写功能,因为它是一边解析,一边处理,一边释放资源。
9、当然,当SAX和STAX在读取数据时,如果读取到内存的数据不释放,-------内存中将存在整个xml文档数据(类似DOM,也就支持回写了)
10、在javaee日常开发中-----有先使用DOM,(编程简单)
当然当xml文档数据非常多时,不可能使用DOM------造成内存溢出------优先使用STAX或者SAX
特别是在移动开发过程中,会使用STAX,-------android xml pull
11、用JAXP进行xml解析:javax.xml.parsers(这是个包):存储了DOM和SAX的解析器
JAXP是个具体的代码包,它里面实现了DOM和SAX的解析xml思想,从JDK6.0开始,也支持STAX这种思想。
org.w3c.dom:存放xml 解析时的解析类。
org.xml.sax:存放SAX解析相关工具类。
xml文档中的所有元素、属性、文本都会被解析成node节点。
注意:属性节点不属于任何节点的父节点或者子节点。
12、DOM解析的快速入门:
1)、创建xml数据文件
在企业的实际开发中,为了简化xml的生成和解析------xml数据文件一般不使用约束。
2)、使用DOM解析xml
将整个xml加载到内存中:工厂-----解析器----解析加载
分三步:
1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 3 DocumentBuilder builder = factory.newDocumentBuilder(); 5 Document document = builder.parse("xml文档的名称");
接下来就是你获得xml中的具体标签,或者说是元素了。
例如:
1 NodeList nodelist = document.getElementsByTagName("标签名称"); 2 for(int i=0;i<nodelist.getLenth();i++){ 3 Node node = nodelist.item(i); 4 Element element = (Element)node; 5 element.getNodeType(); 6 element.getNodeValue(); 7 element.getTextContent(); 8 }
注意:getElementById()方法,必须用于带有约束的xml文档中。不带约束的xml文档是不能使用getElementById的。
所有语言默认都是支持DTD技术,当使用schema时,需要单独导入schema。
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------