XML(EXtensible Markup Language),可扩展标记语言
XML与操作系统、编程语言的开发平台无关
实现不同系统之间的数据交换
数据交互
配置应用程序和网站
Ajax基石
声明:
文档元素描述信息
- "1.0" encoding="UTF-8"?>
- <books>
-
- <book id="bk101">
- <author>王珊author>
- <title>.NET高级编程title>
- <description>包含C#框架和网络编程等description>
- book>
- <book id="bk102">
- <author>李明明author>
- <title>XML基础编程title>
- <description>包含XML基础概念和基本作用description>
- book>
- books>
XML文档内容由一系列标签元素组成:<元素名 属性名=“属性值”>元素内容元素名>
空元素:
注意:1.属性值用双引号包裹 2.一个元素可以有多个属性 3.属性值中不能直接包含<、“、& 4.不建议使用的字符:‘、>
所有XML元素都必须有结束标签
XML标签对大小写敏感
XML必须正确的嵌套
同级标签以缩进对齐
元素名称可以包含字母、数字或其他的字符
元素名称不能以数字或者标点符号开始
元素名称中不能含空格
- "1.0" encoding="UTF-8"?>
- <batchCompany xmlns="http://www.Aptech_edu.ac"
- xmlns:tea="http://www.tea.org">
- <batch-list>
- <batch type="thirdbatch">第三批次batch>
- <batch tea:type="thirdbatch">第三批茶batch>
- <batch>午班批次batch>
- batch-list>
- batchCompany>
除非带有前缀,否则属性属于所属的元素的命名空间
作用:解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素
比如:
- "1.0" encoding="UTF-8"?>
- <cameras xmlns:canon="http://www.canon"
- xmlns:nikon="http://www.nikon.com">
- <canon:camera prodID="P663" name="Camera傻瓜相机"/>
- <nikon:camera prodID=“K29B3” name=“Camera超级35毫米相机"/>
- cameras>
非验证解析器---检查文档格式是否良好
验证解析器---使用DTD检查文档的有效性
基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源
基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小
非常优秀的Java XML API
性能优异、功能强大
开放源代码
文档对象模型(Document Object Model)
DOM把XML文档映射成一个倒挂的树
- <book >
- <title>三国演义title>
- <author>罗贯中author>
- <price>30元price>
- book>

DOM解析包:org.w3c.dom

1.创建解析器工厂对象
2.解析器工厂对象创建解析器对象
3.解析器对象指定XML文件创建Document对象
4.以Document对象为起点操作DOM树
- "1.0" encoding="UTF-8"?>
- <PhoneInfo>
- <Brand name="华为">
- <Type name="U8650" />
- <Type name="HW123" />
- <Type name="HW321" />
- Brand>
- <Brand name="苹果">
- <Type name="iPhone4" />
- Brand>
- PhoneInfo>
- import java.io.IOException;
-
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
-
- import org.w3c.dom.Document;
- import org.xml.sax.SAXException;
-
- public class XmlDocumentDemo02 {
- //定义一个方法实现获取Document对象操作
- public Document getDocument(String url){
- Document document = null;
- //创建解析器工厂对象
- DocumentBuilderFactory bdf = DocumentBuilderFactory.newInstance();
- //通过解析器工厂对象创建解析器对象
- try {
- DocumentBuilder db = bdf.newDocumentBuilder();
- document = db.parse(url);
- } catch (ParserConfigurationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SAXException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return document;
- }
- }
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
-
- public class Test {
- public static void main(String[] args) {
- //创建XMLDocumentDemo02对象
- XmlDocumentDemo02 xdd = new XmlDocumentDemo02();
- //调用getDocument(string url)将"收藏信息.xml"文件转换成Document对象
- Document document = xdd.getDocument("收藏信息.xml");
-
- //获取数据
- NodeList brands = document.getElementsByTagName("Brand");
- for (int i = 0; i < brands.getLength(); i++) {
- //Node是一个节点接口,节点包括元素节点,属性节点,文本节点,而现在我们获取的是brand节点,所以需要进行类型转换
- Node node = brands.item(i);
- Element brand = (Element)node;
- String value=brand.getAttribute("name");
- System.out.println(value);
- }
- }
- }