1、xml是可扩展的标记子性、解释性语言。
2、用XML可以起到数据库的作用:
原因是xml可以描述表结构,xml还可以承载数据。
3、读取XML文件的两种接口:
- DOM: 一次性把所有XML文件的信息都读取到内存中,如何就可以操作XML文件 (适合读写小的XML文件)
- SAX: 采用事件机制,从头到尾读取XML文件,并把读到的信息抛出来 (适合读取大型XML文件)(不常用,这里不写了)
4、xml重点集
- XML文档的第一行应该为文档声明 <?xml version="1.0"?>
- XML标志是大小写敏感的
与HTML不一样, XML标记是大小写敏感的。 - 所有的XML元素必须合理包含
在XML中不允许不正确的嵌套包含。例如:
<b><i>This text is bold and italic</i></b>
- 所有的XML文档必须有一个根元素
XML文档中的第一个元素就是根元素。所有的元素都可以有子元素,子元素必须正确的嵌套在父元素中。 - 所有的XML元素都必须要有一个结束标志
在XML文档中, 忽略结束标记是不符合规定的。在HTML文档中,一些元素可以是没有结束标记的 - 属性值必须使用引号“”
- 在XML中,元素的属性值没有引号引着是不符合规定的。
- XML中的注释
在XML中注释的语法基本上和HTML中的一样。
5、xml文档举例
<?xml version="1.0" encoding="UTF-8"?>
<schools>
<school sname="内蒙古民族大学">
<class cno="100" cname="java一班">
<student sno="1001">
<name>张三</name>
</student>
<student sno="1002">
<name>李四</name>
</student>
<student sno="1003">
<name>王五</name>
</student>
</class>
<class cno="200" cname="java二班">
<student sno="2001">
<name>贝贝</name>
</student>
<student sno="2002">
<name>欢欢</name>
</student>
<student sno="2003">
<name>点点</name>
</student>
</class>
</school>
<school sname="内蒙古师范大学">
<class cno="300" cname="java一班">
<student sno="3001">
<name>杨幂</name>
</student>
<student sno="3002">
<name>迪丽热巴</name>
</student>
<student sno="3003">
<name>杨颖</name>
</student>
</class>
<class cno="400" cname="java二班">
<student sno="4001">
<name>罗晋</name>
</student>
<student sno="4002">
<name>唐嫣</name>
</student>
<student sno="4003">
<name>黄晓明</name>
</student>
</class>
</school>
</schools>
6、xml主要方法
- Document // Document接口代表整个HTML或XML文档
- getElementsByTagName(String tagname) // 以文件顺序返回 NodeList所有 Elements的给定标签名称,并包含在文档中
- NodeList getChildNodes() //包含此节点的所有子节点
- getNodeType() //代表基础对象的类型的代码,如上所定义。
- getTextContent() //此属性返回此节点及其后代的文本内容。
- String getAttribute(String name) //按名称检索属性值。
7、xml文档读取举例
package com.icss.ui;
import java.io.File;
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.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TestXML {
public static void main(String[] args) {
String path=TestXML.class.getResource("/").getPath();//获取程序正在执行的路径
String fname=path+"/School.xml";
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();//定义工厂API,使应用程序能够从XML文档获取生成DOM对象树的解析器。
Document doc =null;//文档树的根
try {
DocumentBuilder db = dbf.newDocumentBuilder();//从XML获得一个Document
doc = db.parse(new File(fname));//将给定文件的内容解析为XML文档,并返回一个新的DOM Document对象。
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
NodeList nlist = doc.getElementsByTagName("school");//读取,然后存放于NodeList节点集合中
for(int i=0;i<nlist.getLength();i++) {
Node node=nlist.item(i);//返回index中的index项目。 如果index大于或等于列表中的节点数,则返回null 。
if(node.getNodeType()==Node.ELEMENT_NODE)
{
Element sch=(Element)node;
String name=sch.getAttribute("sname");
System.out.println("sname="+name);
//读取当前school下面的class信息
NodeList classlist = sch.getChildNodes();
for(int k=0;k<classlist.getLength();k++) {
node = classlist.item(k);
if(node.getNodeType() == Node.ELEMENT_NODE) {//表示是xml文档中的元素
Element cls = (Element)node;
String cno = cls.getAttribute("cno");//获取属性值
String cname = cls.getAttribute("cname");//获取属性值
System.out.println(cno + "--" + cname);
}
}
}
}
}
}
执行结果:
sname=内蒙古民族大学
100--java一班
200--java二班
sname=内蒙古师范大学
300--java一班
400--java二班