XML(DOM SAX JDOM DOM4J)

XML()可扩展标记语言,AJAX=(异步)JavaScript+XML

XML更适合数据交互,减轻访问服务器的负担,操作完成之后一次性上传数据,要求环境不高的时候,可以保存数据(使能XML数据库和原生XML数据库)


DOM

例子一:DOM解析XML文件

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class DOMDemo1 {
	public static void main(String args[]) throws Exception {
		//取得DocumentBuilderFactory类的对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//取得DocumentBuilder类的对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		//定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
		//读取指定路径的XML文件
		Document doc = builder.parse("D:"+File.separator+"XML"+File.separator+"dom_demo1.xml");
		//查找name的节点
		NodeList nodeList = doc.getElementsByTagName("name");
		//输出NodeList中第一个子节点中文本节点的内容
		System.out.println(nodeList.item(0).getFirstChild().getNodeValue());
	}
}
dom_demo1.xml

<?xml version="1.0" encoding="gb2312"?>
<!--<?xml-stylesheet type="text/css" href="style.css"?>-->
<info>
	<name>lql</name>
</info>


例子二:DOM解析XML文件---循环取节点多的数据

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class DOMDemo2 {
	public static void main(String args[])throws Exception{
		//取得DocumentBuilderFactory类的对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//取得DocumentBuilder类的对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		//定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
		//读取指定路径的XML文件
		Document doc = builder.parse("D:"+File.separator+"XML"+File.separator+"dom_demo2.xml");
		//查找link节点
		NodeList nodeList = doc.getElementsByTagName("link");
		//输出NodeList中第一个子节点中文本节点的内容
		for(int i=0;i<nodeList.getLength();i++){//循环输出节点内容
			Element element = (Element) nodeList.item(i);//取得每一个元素
			System.out.print("姓名:"+element.getElementsByTagName("name").
					item(0).getFirstChild().getNodeValue());
			System.out.println(" email:"+element.getElementsByTagName("email").
					item(0).getFirstChild().getNodeValue());
		}
	}
}
dom_demo2.xml
<?xml version="1.0" encoding="gb2312"?>
<!--<?xml-stylesheet type="text/css" href="style.css"?>-->
<info>
	<link>
		<name>lql</name>
		<email>tony.liu@xxx.com</email>
	</link>
	<link>
		<name>Tony</name>
		<email>lql@xxx.com</email>
	</link>
</info>

例子三:写入XML数据
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DOMDemo3 {
	public static void main(String agrs[])throws Exception{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.newDocument();//创建一个新的文档
		//建立各个操作节点
		Element info = doc.createElement("info");
		Element link = doc.createElement("link");
		Element name = doc.createElement("name");
		Element email = doc.createElement("email");
		//设置节点的文本内容,即为每一个节点添加文本节点
		name.appendChild(doc.createTextNode("lql"));
		email.appendChild(doc.createTextNode("tony.liu@xxx.com"));
		link.appendChild(name);
		link.appendChild(email);
		info.appendChild(link);
		doc.appendChild(info);//文档上保存节点
		//输出到文档的文件中
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer t = tf.newTransformer();
		t.setOutputProperty(OutputKeys.ENCODING, "GBK");//设置编码
		DOMSource source = new DOMSource(doc);			//输出文档
		//指定输出位置
		StreamResult result = new StreamResult(new File("D:"+
				File.separator+"XML"+File.separator+"dom_demo3.xml"));
		t.transform(source, result);
		
	}
}

SAX

首先编写一个MySAX文件

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

public class MySAX extends DefaultHandler{	//定义SAX解析器

	public void startDocument(){
		System.out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");
	}
	
	public void endDocument(){
		System.out.println("\n 文档读取结束...");
	}
	
	public void startElement(String uri, String localName, 
			String qName, Attributes attributes){
		System.out.print("<");
		System.out.print(qName);
		if(attributes != null){
			for(int x= 0 ;x<attributes.getLength();x++){
				System.out.print(" "+attributes.getQName(x)+"=\""
						+attributes.getValue(x)+"\"");
			}
		}
		System.out.print(">");
	} 
	
	public void endElement(String uri, String localName, 
			String qName){	//元素结束
		System.out.print("</");
		System.out.print(qName);
		System.out.print(">");
	}
	
	public void characters(char[] ch, int start, int length){//取得元素内容
		System.out.print(new String(ch,start,length));//输出内容
	}
}
调用MySAX

import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class TestSAX {
	public static void main(String[] args)throws Exception{
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		parser.parse("D:"+File.separator+"XML"+
				File.separator+"dom_demo2.xml", new MySAX());
	}
}

JDOM

import java.io.File;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

public class ReadXML {
	public static void main(String[] args)throws Exception {
		SAXBuilder builder = new SAXBuilder();
		Document read_doc = builder.build("D:"+File.separator+"XML"+File.separator+"WriteXML.xml");
		Element stu = read_doc.getRootElement();//读取根元素
		List list = stu.getChildren("link");
		for(int i=0;i<list.size();i++){
			Element e = (Element)list.get(i);
			String name = e.getChildText("name");
			String id = e.getChild("name").getAttribute("id").getValue();
			String email = e.getChildText("email");
			System.out.println(name+" "+email);
		}
	}
}

WriteXML.xml

<?xml version="1.0" encoding="GBK"?>
<info><link><name id="lql">lql</name><email>tony.liu@shheguo.com</email></link></info>
jdom解析需要开源架包

DOM4J

解析数据

import java.io.File;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class DOM4JReader {
	public static void main(String[] args) throws Exception{
		File file = new File("D:"+File.separator+
				"XML"+File.separator+"dom_demo2.xml");
		SAXReader reader = new SAXReader();
		Document doc = reader.read(file);//读取xml文件
		//JDOM操作的时候是要取得根节点
		Element element = doc.getRootElement();// 取得根节点
		// 现在应该根据根节点找到全部的子节点,link
		Iterator iter = element.elementIterator();
		while(iter.hasNext()){
			Element elem = (Element) iter.next();
			System.out.print(elem.elementText("name")+" ");
			System.out.println(elem.elementText("email"));
		}
	}
}

dom_demo2.xml

<?xml version="1.0" encoding="gb2312"?>
<!--<?xml-stylesheet type="text/css" href="style.css"?>-->
<info>
	<link>
		<name>lql</name>
		<email>tony.liu@xxx.com</email>
	</link>
	<link>
		<name>Tony</name>
		<email>123@xxx.com</email>
	</link>
</info>


写入数据
import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class DOM4JWriter {
	public static void main(String[] args)throws Exception {
		Document doc = DocumentHelper.createDocument();
		Element info = doc.addElement("info");
		Element link = info.addElement("link");
		Element name = link.addElement("name");
		Element email = link.addElement("email");
		Element link1 = info.addElement("link");
		Element name1 = link1.addElement("name");
		name.setText("lql");
		email.setText("tony.liu@shheguo.com");
		name1.setText("tony");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("GBK");
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
				"d:"+File.separator+"XMl"+File.separator+"DOM4JWriter.xml")));
		writer.write(doc);
		writer.close();
	}
}

dom4j解析xml架包


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值