XML与java的应用

摘要:
常用方法:appendChild;//添加子节点getFirstChild();//获得第一个子节点getNodeValue();//得到节点的值hasChildNodes();//是否还有子节点NodeList:是由Node组成的一个List。

对于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.*;
importjavax.xml.transform.dom.*;
importjavax.xml.transform.stream.*;
importjavax.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的子节点

免责声明:文章转载自《XML与java的应用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle基础 触发器Oracle “dba_tables”介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JAX-WS HandlerChain使用详解

JAX-WS的Handler和Servlet的Filter相似,可以对所有WebServicer进行拦截,在Handler中可以记录日志、权限控制、对请求的SOAP消息进行加密,解密等。JAX-WS提供两个Handler接口,LogicalHandler和SOAPHandler。LogicalHandler处理的是Message Payload,只能够访...

[转]如何让Android字体自适应屏幕分辨率

本文转自:http://www.cnblogs.com/tt_mc/archive/2012/03/10/2389555.html 在不同的分辨率下,Android字体大小怎么自适应分辨率的变化? 假设需要适应320x240,480x320分辨率。在res目录下新建文件夹values-320x240,values-480x320。然后在文件夹values...

Android中xml设置Animation动画效果详解

在Android中,Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation渐变动画,另一种是frame by frame animation画面转换动画。 tweened animation渐变动画有以下两种类型: 1.alpha 渐变透明度动画效果 2.scale 渐变尺寸伸缩动画效果 frame by fra...

OTA配置服务器

这有一个388的文档: 1. 服务器端工具:Apache Tomcat http://jakarta.apache.org/tomcat/index.html 2. 按要求将jar文件和jad文件准备好(下面称为test.jar和test.jad) 3. 在Tomcat的安装目录下的webapp\ROOT子目录下新建一文件夹test 4. 将jar和jad...

API常用后台解析XML,JOSN数据的两种方式(XML)

private XmlDocument Getlogistics(string UserID, stringLogisticsID) { string url = string.Format("https://secure.shippingapis.com/ShippingAPI.dll?API=Track...

修改weblogic上下文路径

在使用weblogic的时候,启动之后,如果有IP端口之后有后缀,那么可能会导致404错误 查看weblogic控制台,然后点击部署,然后查看上下文,从而可以看到加什么后缀才是正常的 weblogic上下文根路径在WEB-INF目录中,然后是web.xml文件或者是weblogic.xml文件 在一个标签为<context-root>/&...