java学习 (1)xml基础及读取xml
1.何为XML
xml中文名为可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
2.xml的一般应用
xml在企业应用中一般使用于:
1、存储和传输数据
2、作为系统的配置文件
xml的语法 如果xml中的数据内容包含特殊字符的话可以使用转义字符或者CDATA 如 <![CDATA[<b>abc</b>]]> 现实中一般使用CDATA
xml的定义 <?xml version="1.0" encoding="utf-8" ?>
xml的两种约束方式: DATA 和schema约束 DATA约束是.data文件 schema 是.xml文件
3.xml的解析
在应用中xml的解析方式一般有这几种:dom、sax、stax
dom(document object model):文档对象模型,W3C推荐的一种XML的解析方式,解析实现方式将整个xml文档一次性加载进内存来形成一个文档对象,然后对内存中的这个文档对象进行操作,java和JavaScript对dom解析进行支持。在内存中以树形结构存储,支持回写。
sax(simple api for xml):xml的简单api,产生于xml民间社区,几乎所有的xml解析都支持它。当xml文档相当大的时候采用dom加载效率将极低,而sax解析xml是边解析、边处理、边释放内存.不支持回写(可等全读至内存再回写)
stax(the stream api for xml):是jdk6.0中推出的一种拉模式处理xml文档的api.不支持回写(可等全读至内存再回写),性能比sax要好
4.xml解析开发
jaxp(sun)、xml pull、dom4j
xml解析方式是解析xml的思想,没有具体代码,解析开发包是xml解析思想的代码实现。
jaxp是sun公司推出的对xml进行解析的工具api,它支持dom、sax、stax
dom4j是社区开源提供的框架,支持dom的解析方式
xml pull 是移动设备内置的一种xml解析方式,主要支持stax
再javaee开发中一般优先使用dom解析方式,因为dom解析一般编程较容易实现。
jaxp开发包是JavaSE的一部分,它由javax.xml,org.w3c.dom,org.xml.sax包及其子包组成。
1.dom解析方式
jdk中javax.xml.parsers中存放有xml的解析器
DocumentBuilderFactory: 工厂api,使用工厂创建类的方式创建xml的Dom解析器。
DocumentBuilder:解析xml,获取Dom文档实例(dom解析的实现就是将xml最为一个对象加载进机器内存)
Document :xml加载后代码的体现
dom是以层次结构组织的节点或信息片段的集合,是xml数据的一种树形的表示,文档中的所有元素、属性、文本都会被解析成node节点(包括空白字符,空白字符也会被看成是一个节点的子节点),各节点中有parent、children、sibling(兄弟)的关系,属性节点不属于任何节点的子节点

1 @Test 2 public void demo1() throws Exception{ 3 //通过dom解析xml 工厂--解析--加载 4 //构造工厂 5 DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); 6 //通过dom工厂创建解析器 7 DocumentBuilder buider=builderFactory.newDocumentBuilder(); 8 //使用解析器加载xml文档 9 Document document= buider.parse("books.xml"); 10 //在文档对象中通过节点名称获取名称相关的节点集合 11 NodeList nodeList=document.getElementsByTagName("name"); 12 for(int i=0;i<nodeList.getLength();i++) 13 { 14 //xml中的所有数据都是node节点,节点类型有Text、Element等等 15 Node node=nodeList.item(i);//获取节点集合中的第i各节点 16 node.getAttributes(); // 获取节点的属性 17 node.getNodeName(); // 获取节点的名称 18 node.getNodeType(); 19 node.getNodeValue(); //任何标签节点的值都是null 20 //获取节点中的文本内容 21 System.out.println(node.getTextContent()); 22 } 23 }
编程思想: 1.装载xml文档 -----Document 三部曲:工厂生产--工厂创建解析器--解析器加载xml文档形成文档对象
2.通过document获取指定元素------getElementsByTageName
3.遍历节点获取每一个node
(4.将node转换为对应的类型)
5.获取节点的属性或者值
xml总结
dom加载实现一般先定位到局部,然后遍历局部通过相当位置查找查找到自己需要的节点及内容
getElementById 必须用于带有约束的xml文档中 ID即约束
http://www.imooc.com