您的位置:首页 > 编程语言 > Java开发

XML与java的应用

2011-10-03 13:13 381 查看
对于XML进行解析,我们需要调用第三方提供的接口,对XML文档进行解析;

对于XML处理方面,W3C有两种解决方法:

(1)DOM(Document Object Model):

(2)SAX(Simple API for XML)

DOM介绍:

特点:先将xml文档解析成dom树,并放入内存,能够随机访问任意节点。

缺点:因为需要放入内存操作,所以对文件大小有限制。

DOM位于org.w3c.dom包中。

一、3个核心的接口:

接口所在包:

import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

(1)Document:是整个文档的根结点。只有取得了Document结点,才能够对文档操作。

常用方法:


(1)Element elem = document.createElement("elem"); //创建一个结点



(2)Attribute attr = document.createAttribute("attr"); // 创建一个属性



(3)Text t = document.createTextNode("text"); //创建一个文本节点



(4)NodeList list = document.getElementsByTagName("..."); //寻找某个结点


(2)Node:DOM树是由结点组成,因此结点是很重要的。

常用方法:


(1)appendChild(Node child); //添加子节点

(2)getFirstChild(); //获得第一个子节点

(3)getNodeValue(); //得到节点的值

(4)hasChildNodes(); //是否还有子节点


(3)NodeList:是由Node组成的一个List。

常用方法:


(1)Node item(int x); //获得第几个节点

(2)getLength(); // 获得list的长度


如果要获得Document对象,需要:

------------------------------------------------------------

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse("....");获得doc

------------------------------------------------------------

生成xml文件方法:需要TransformerFactory,Transformer,StreamResult,DOMSource。

方法:

Document doc = builder.newDocument();



生成DOM树

StreamResult result = new StreamResult(new File("..."));

DOMSource source = new DOMSource(doc);

TransformerFactory factory = TransformerFactory.newInstance();

Transformer t = factory.newTransformer();

t.transform(source,result);即可

<?xml version="1.0" encoding="GBK"?>
<persons>
<person>
<name>xiazdong</name>
<age>20</age>
<school>ecnu</school>
</person>
<person>
<name>xzdong</name>
<age>15</age>
<school>nanyang</school>
</person>
</persons>


读取文档信息:

import org.w3c.dom.*;
import javax.xml.parsers.*;
public class DOMDemo01{
public static void main(String args[])throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("demo.xml");
NodeList plist = doc.getElementsByTagName("person");
for(int i=0;i<plist.getLength();i++){
Element elem = (Element)plist.item(i);
System.out.println("姓名:"+elem.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
System.out.println("年龄:"+elem.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());
System.out.println("学校:"+elem.getElementsByTagName("school").item(0).getFirstChild().getNodeValue());
}
}
}


生成XML文档:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import java.io.*;
public class DOMDemo02{
public static void main(String args[])throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element person = doc.createElement("person");
Element age = doc.createElement("age");
Element name = doc.createElement("name");
Text xiazdong = doc.createTextNode("xiazdong");
Text ageText = doc.createTextNode("15");
age.appendChild(ageText);
name.appendChild(xiazdong);
person.appendChild(name);
person.appendChild(age);
doc.appendChild(person);
DOMSource source = new DOMSource(doc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
StreamResult result = new StreamResult(new File("output.xml"));
t.transform(source,result);
}
}


生成后xml文档结构:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person>
<name>xiazdong</name>
<age>15</age>
</person>


SAX介绍:

只能读取,不能生成或改变,并且只能遍历。

缺点:只能读取。

SAX的主要方法有5个:

(1)public void startDocument()throws SAXException;

(2)public void endDocument()throws SAXException;

(3)public void startElement(String uri,String localname,String name,Attribute attr)throws SAXException;

(4)public void endElement(String uri,String localname,String name)throws SAXException;

(5)public void characters(char[]ch , int start,int length)throws SAXException;

SAX属于触发类型的,当遇到文档开头就触发(1)方法,遇到元素的开头触发(3)方法;

因此如果我们需要使用SAX,必须要自己实现一个SAX解析器;

注意:解析器必须继承DefaultHandler;

实现完解析器后,则可以做操作:

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

parser.parse("文件路径",new MySAXParser());

即可;

XML解析工具:

(1)DOM4J

DOM4J是一个XML操作的包,为了提供给用户更简便的操作XML。

以下是生成一个XML文件的代码:

Document doc = DocumentHelper.createDocument();

Element name = doc.addElement("name");

Element first = name.addElement("firstname");

Element second = name.addElement("secondname");

first.setText("xia");

second.setText("second");

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("gb2312");

XMLWriter writer = new XMLWriter(new FileOutputStream("out.xml"),format);

writer.write(doc);

writer.close();

以下是读取一个XML文件的代码:

SAXReader reader = new SAXReader();

Document doc = reader.read(new File("out.xml"));

Element root = doc.getRootElement();

Iterator iter = root.elementIterator();

Element elem = (Element)iter.next();

String str = elem.elementText("first");

(2)JDOM:也是一个非常好的解析工具,但是性能上比DOM4J差了不少,所以不用。

Javascript中运用DOM:把html想象成一个DOM树。

这里通过id进行查找。

var elem = document.getElementById("id");

elem.innerHTML

生成一个<input type = "button" value = "button"/>过程:

var form = document.getElementById("form"); //获得表单节点

Element button = document.createElement("input"); //创建一个节点

button.setAttribute("type","button"); //设置属性

button.setAttribute("value","button"); //设置属性

form.appendChild(button); //添加form的子节点

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: