XML:可扩展的标记语言
HTML:超文本标记语言
xml与HTML的区别
比较的内容 HTML XML
可扩展性 不具备扩展性 具备扩展性
侧重点 侧重于显示信息 侧重于描述信息
语法要求 不要求标记的嵌套 严格要求嵌套、配对
不要求标记的配对 遵循一定的结构顺序的
不要求标记之间
具有一定的顺序
可读性 难于阅读、维护 结构清晰的便于阅读以及维护
数据和显示关系 内容与描述混合 内容的描述与显示相分离
在一起
保值性 不具备保值性 具有保值性
XML文件的组成:
由前导区以及数据区组成的
- 前导区有以下三种属性构成:
version:表示使用的XML版本,一般都是从1.0开始
encoding:页面中使用文字的编码,如果有中文则要指定相对应的支持中文的编码。
standalone:此XML文件是否独立运行,需要进行显示可以使用CSS或XSL控制。
注意:在进行XML前导区声明的时候,其中的3个属性必须按照固定的顺序编写。 - 数据区:
所有的数据区必须有一个根元素,一个根元素下面可以存放多个子元素,
但是要求每一个元素都必须完结,每一个标记都是区分大小写的。
CDATA标记:
用来标识文件数据,当XML解析器处理到CDATA标记的时候,它不会解析该段数据中的任何符号以及标记,只是将原数据原封不动的传递给应用程序。
CDATA标记的语法:<![CDATA[不需要解析的内容]]>
XML的解析:
在XML中由于更多的是描述信息的内容,所以在得到一个XML文档后应该利用程序按照其中元素的定义名称取出对应的内容,这样的操作就称为XML的解析。
在XML的解析中,W3C给我们定义SAX和DOM两种解析方式。
DOM解析操作:
将我们的XML文档,当做一个DOM树状结构的模型,通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称为随机访问机制。
优点 :可以随意访问DOM结构中的任何的一部分数据
缺点:将所有的数据一次性的转换为DOM结构的树,存放在内存中,因此当数据很大,或者是结构很复杂的时候,对于内存的需求比较大。
想要使用DOM方式进行XML的解析,需要以下的接口:
1.document:此接口代表了整个XML文档,表示整颗DOM树的根。提供可对文档中数据进行访问的方法。
2.node:表示文档树中的每一个节点
3.nodelist:表示文档树中的一组节点
实例:DOM方式生成XML文件
<?xml version="1.0" encoding="GBK" ?>
<addresslist>
<linkman>
<name>张三</name>
<email>[email protected]</email>
</linkman>
</addresslist>
步骤:
1.建立DocumentBuilderFactory对象
2.建立DocumentBuilder
3.建立Document对象
注意:生成XML文件的时候,我们创建的空白的Document对象。
4.创建DOM结构中的节点
5.对标签设置内容以及关系
6.建立TranformerFactory对象,用来创建Transformer
7.建立Transformer对象,利用此对象提供的transformer方法将DOM对象输出到文件中。
8.设置输出的XML文件的字符集格式
9.建立DOMSource对象,用此对象可以选择将哪一个DOM结果进行输出。
10.建立StreamResult对象,用来执行将文档内容输出到哪一个文件中
11.调用Transformer的transformer方法进行输出
public class DomCreateXML{
public static void main(String[] args){
createXML();
}
public static void createXML(){
//1.建立DocumentBuilderFactory对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
//2.建立DocumentBuilder
DocumentBuilder builder = DocumentBuilder.newDocumentBuilder();
//3.建立Document
Document doc = builder.newDocument();
//4.创建DOM结构中的节点
Element addresslist = doc.createElement("addresslist");
Element linkman = doc.createElement("linkman");
Element name= doc.createElement("name");
Element email= doc.createElement("email");
//5.对标签设置内容以及关系
name.appendChild(doc.createTextNode("张三"));
email.appendChild(doc.createTextNode("[email protected]"));
linkman.appendChild(name);
linkman.appendChild(email);
addresslist .appendChild(linkman);
doc.appendChild(addresslist);
//6.建立TranformerFactory对象,用来创建Transformer
TranformerFactory tf = TranformerFactory.newInstance();
//7.建立Transformer对象,利用此对象提供的transformer方法将DOM对象输出到文件中
Transformer t = tf.newTransformer();
//8.设置输出的XML文件的字符集格式
t.setOutputProperty(OutputKeys.ENCODING,"GBK");
//9.建立DOMSource对象,用此对象可以选择将哪一个DOM结果进行输出
DOMSource ds = new DOMSource(doc);
//10.建立StreamResult对象,用来执行将文档内容输出到哪一个文件中
StreamResult sr = new StreamResult(new File("d:"+File.separator+"linkman.xml"));
//11.调用Transformer的transformer方法进行输出
t.transform(ds,sr);
}catch (SAXException e) {
//TODO Auto-generated catch block
e.printStackTrace();