目录
1、XML文件的基本结构
XML是eXtensible Markup Language 缩写,称之为可扩展置标语言。
规范的XML文件应当用“XML声明”开始。
根标记可以有若干个子标记。
如果一个标记仅仅包含文本,称为叶标记。
非空标记必须由“开始标记”与“结束标记”组成。
XML文件的标记必须形成树型结构
![](https://i-blog.csdnimg.cn/blog_migrate/b1be6e17dadfb77be930ecc3ad6eb7d9.png)
一个规范的XML文件应当以XML声明作为文件的第一行。一个最基本的XML声明:
<?xml version="1.0" ?>
XML声明中也可以指定encoding属性的值,没有指定的情况下默认值是UTF-8。
<?xml version="1.0" encoding="UTF-8" ?>
如果在编写XML文件时只准备使用ASCII字符和汉字,可以将encoding属性的值设置为gb2312.
如果在编写XML文件时只准备使用ASCII字符,可以将encoding属性的值设置为ISO-8859-1.
标记名称区分大小写,
例如:<name>Kevin</name>
与<Name> Kevin</Name>
是完全不同的标记。
空标记
空标记以 “<”标识开始,用“/>” 标识结束
<chair width="24" height="12" />
<和标记名称之间不要含有空格
非空标记
由“开始标记”与“结束标记”以及该标记所含有的内容组成。
<sex> 男 </sex >
CDATA段
如果标记内容想使用尖括号、单引号等这些特殊字符,办法之一是通过使用CDATA段。
CDATA段用“<![CDATA[”作为段的开始,用“]]>”作为段的结束。
<hello>
<![CDATA[
boolean boo=true&&false
<你好>
]]>
</hello>
属性
属性是一个名值对,即属性必须由名字和值组成。
<桌子 width="300" height="600" length="1000">
吃饭用的
</桌子>
<椅子 color="red" />
2、DOM解析器
DOM(Document Object Model,文档对象模型)是W3C制定的一套规范标准。
DOM规范的核心是按树型结构处理数据。
1.使用DOM解析器的基本步骤
-
实例化一个DocumentBuilderFactory对象:
DocumentBuilderFactory factory= DocumentBuilderFactory. newInstance();
-
返回一个DocumentBuilder对象(称做DOM解析器):
DocumentBuilder builder = factory. newDocumentBuilder();
-
解析指定的文件,并返回一个实现了Document接口的实例:
Document document= builder. parse(new File("price.xml")) ;
2.Document对象
DOM解析器负责在内存中建立Document对象
Document document= builder. parse(new File("price.xml")) ;
parse方法将整个被解析的XML文件封装成一个Document对象。
对象结构
Document对象就是一棵“树” 。
Element类、Text类和CDATASection类都是实现了Node接口的类。
一个Element节点中还可含有Element节点、Text节点和CDATASection节点。
![](https://i-blog.csdnimg.cn/blog_migrate/b2da39b7053fa0aabce4a973e0566562.png)
Element节点
Element节点常用下列方法获取和该节点相关的信息
String getTagName()返回该节点的名称。
String getTextContent()返回当前节点的所有Text子孙节点中的文本内容。
String getAttribute(String name)返回节点中参数name的属性值。
Boolean hasAttribute(String name) 判断当前节点是否有参数name指定的属性。
NodeList getElementByTagName(String name)返回一个NodeList对象。
NodeList getChildNodes()返回一个NodeList对象。
Text节点
Text节点使用String getWholeText()
方法获取节点中的文本。
CDATASection节点
CDATASection节点使用String getWholeText()
方法获取该节点中的文本。
3、SAX解析器
SAX解析器不在内存中建立和XML文件相对应的树型结构数据,SAX解析器的核心是事件处理机制。
1.使用SAX解析器的基本步骤
-
实例化一个SAXParserFactory对象:
SAXParserFactory factory=SAXParserFactory.newInstance();
-
返回一个SAXParser对象,称之为SAX解析器:
SAXParser saxParser=factory.newSAXParser();
-
解析指定的XML文件:
SAXParser. parse(new File(“price.xml”), handler);
2.SAX解析器的工作原理
SAX解析器调用parse(File f,DefaultHandler dh)
方法解析参数f指定的XML文件,并向该方法的参数dh传递一个事件处理器。
![](https://i-blog.csdnimg.cn/blog_migrate/9ff489ff628a9efd2b8a1431d2c3731d.png)
3. 事件的产生与处理
文件开始事件与结束事件:
解析器报告“文件开始”事件,事件处理器就会调用startDocument()
方法;
解析器报告“文件结束”事件,事件处理器就会调用endDocument()
方法。
开始标记事件与结束标记事件:
当解析器发现一个标记的开始标记时,报告开始事件给事件处理器,事件处理器调用startElement
方法对发现的数据做出处理。
![](https://i-blog.csdnimg.cn/blog_migrate/35d088b706e8dbdf4500861207e67252.png)
解析器报告完该标记的“标记开始”事件后,一定还会报告该标记的“标记结束”事件,事件处理器就会调用 endElement方法进行处理
endElement(String uri,String localName,String qName)
文本数据事件:
当解析器解析报告“文本数据”事件给处理器,事件处理器就会然后调用characters方法对解析的数据做出处理
![](https://i-blog.csdnimg.cn/blog_migrate/86b3c115ef42f4ab14d75b00bd11dbec.png)
注意:对于文本数据,解析器可能分成几个连续的“文本数据”报告给事件处理器。
4、XML与CSS
1.样式表
样式表是一组规则,通过这组规则告诉浏览器用什么样式来显示文本。一个样式表的格式如下:
文本代表
{ 样式规则
}
对于XML文件,样式表中的“文本代表”可以是标记的名称;样式表中的“样式规则”是若干个用分号分隔的“属性名:属性值”,例如,样式表
name
{ display:block;font-size:36pt;
font-weight:bold;
}
如果有多个标记的内容显示方式相同,“文本代表”也可以是这些标记的名称用逗号分隔的字符串。如:
name,sex,birthday
{ display:block;font-size:36pt;
font-weight:bold;
}
注意:文本代表中不要含有非ASCII字符,早期的IE6.0不支持这样的样式表。
2.文本的显示方式
![](https://i-blog.csdnimg.cn/blog_migrate/b16a188e26d293599acaf35432ed67c8.png)
3.字体
与字体有关的属性包括font-family、font-style、font-variant、font-weight、font-size
Name
{
display:list-item;
font-size:14pt;
}
4.文本样式
与文本样式有关的属性:
![](https://i-blog.csdnimg.cn/blog_migrate/98fa2776d58839864c5d85b7e3d27703.png)
5.显示数学公式和化合物分子式
XML文件通过与CSS样式表文件相关联,可以将某个字符的显示位置设置成另一个字符的上标或下标位置。
5、小结
- XML文件是由标记构成的文本文件。
- DOM解析器在内存中按树型结构组织数据。
- SAX解析器根据从文件中解析出的数据产生相应的事件,并报告这个事件给事件处理器。
- 通过将XML文件和一个CSS样式表文件相关联,可以方便地显示XML文件中的标记所含有的文本。