xml的基本定义
3:XML – eXtend Markup Language 可扩展标记语言 – 声明
功能:
用户自己定义元素,表示有结构的数据。
在目前的程序里面,都使用xml做为配置选项。
XML文件,
就是一个文本文件。
通常以*.xml为结束。
里面的格式根据XML规范来声明。
1:声明一个最基本的XML
2:XML文件是用于表达有逻辑结构的数据的
还有的就是简单的了解一下约束
DTD
约束里面可以有什么元素,及它的声明顺序。
所以XML文件是程序员开发的。但是框架师要定义约束。
约束有两种:
1:DTD约束
DTD – Document(文档) Type(类型) Defination(定义)
<!ELEMENT clses (cls+)>
<!ELEMENT cls (stud*)>
<!ATTLIST cls name CDATA #REQUIRED>
<!ELEMENT stud (name,age,addr?)>
<!ATTLIST stud id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
DTD文件是一般的文本文件。
2:XSD约束
XML Schema(命名空间) Defination – 使用命名空间的方式来约束XMl文件
Xsd文件是一个XML文件。
这些简单的了解即可我主要探讨的还是解析还有就是封装
先来说一下的就是解析分为‘
XML解析两大种:
1:官方解析 jaxp - > Java API for XML Process
Jaxp-dom Document Object Model – 文档对象模型
Jaxp-sax - > Simple Api for XML
Jaxp-StAX - > Stream API for XML – 流的方式 – 大量用于android
2:第三解析
Jdom
Dom4j – 第三方解析
下面我就简单的来说一下
jaxp-dom的解析方式
1:jaxp-dom的核心类
类 |
|
|
Org.w3…Doument | 表示整个文档对象 |
|
Org.w3…Element | 元素 <stud> <name> Jack – 文本元素 |
|
DocumentBuilder | 有于读取XML文件的 返回Document对象 |
下面的就是解析步骤
package cn.demo03;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class Demo04_Jaxp_Dom {
@Test
public void testParseXML() throws Exception {
// 1:创建读取XMl的对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//这里是一开始声明就是实例化
DocumentBuilder db = dbf.newDocumentBuilder();
// 2:读取文件返回一个DOM对象
Document dom = db.parse(new File("./xmls/citis.xml"));
// 3:读取里面所有的<pre>元素
NodeList list = dom.getElementsByTagName("pre");。//这个意思得到属性的标签bytagName//elements属性意思
//4:遍历每一个省
for(int i=0;i<list.getLength();i++){
System.err.println("---------------第"+(i+1)+"个省信息-------------------------------");
//获取每个<pre>元素
Element ele = (Element) list.item(i);
//获取这个元素上面的属性
String preName = ele.getAttribute("name");
System.err.println("省:"+preName);
//5:解析这个元素里面的子元素<city>
NodeList list2 = ele.getElementsByTagName("city");//解析这个node集合
System.err.println("-------------------------------------------------------------");
for(int j=0;j<list2.getLength();j++){
//获取每一个city
Element ele2 = (Element) list2.item(j);
String cityName = ele2.getTextContent();
System.err.println("市:"+cityName);
这里需要理解的是nodelist的本质并不是集合类这里可以百度一下
还有就是封装baocun
@Test
public void testPack() throws Exception {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document dom = db.parse(new File("./xmls/clses.xml"));
// 1:读取所有cls元素
NodeList list1 = dom.getElementsByTagName("cls");
// 声明一个集合,用于放cls Bean
List<Cls> list2 = new ArrayList<Cls>();
// 遍历list1,因为里面都是节点
for(int i=0;i<list1.getLength();i++){
//获取每个<cls>元素
Element ele = (Element) list1.item(i);
//每一个<cls>元素,都应该是一个JavaBean - new Cls
Cls cls = new Cls();
//设置cls的name
cls.setName(ele.getAttribute("name"));
//读取这个cls下的所有<stud>节点
NodeList studList = ele.getElementsByTagName("stud");
//遍历这个cls下的所有<stud>节点
for(int j=0;j<studList.getLength();j++){
Element e2 = (Element) studList.item(j);
//每一个<stud>节点,都是一个学生
Stud stud = new Stud();
stud.setId(e2.getAttribute("id"));
stud.setName(e2.getElementsByTagName("name").item(0).getTextContent());
stud.setAge(Integer.parseInt(e2.getElementsByTagName("age").item(0).getTextContent()));
NodeList addrs = e2.getElementsByTagName("addr");
if(addrs.getLength()>0){
String add = addrs.item(0).getTextContent();
stud.setAddr(add);
}
//将每一个学生添加到当前的班中去
cls.getStuds().add(stud);
}
//封装完成以后,将cls对象放到list2
list2.add(cls);
}
再次声明我的资料全部来自我师王建老师