XML详解

						**第一章 xml文件**

1.1什么是xml文件
(1)xml是课扩展表示语言,就是开发者在符合xml命名规则的基础之上,可以根据自己的需要定义自己的标签。
1.2xml文件的作用
主要是用来储存数据
1.3解析xml文件的方法
DOM、DOM4J、SAX

						**第二章 DOM4J解析xml文件**

2.1导入DOM4J.jar包
dom4j-1.6.1.jar
2.2DOM4J常用的对象
SAXReader:读取xml文件到Document树结构文件对象。
Document:是一个xml文档对象树,类比Html文档对象。
Element:元素节点。通过Document对象可以查找单个元素。
2.3DOM4J解析步骤
第一步:创建解析器
SAXReader reader = new SAXReader();
第二步:通过Document对象:通过解析器reader方 法获取
Document doc = new Document(“studentInfo.xml”);
第三步:获取xml根节点
Element root = doc.getRootElement();
第四步:遍历解析子节点
2.4实例一 使用DOM4J解析xml文件
准备students.xml文件

<?xml version="1.0" encoding="UTF-8"?> 吴飞 java学院 62354666 男,1982年生,硕士,现就读于北京邮电大学 李雪 C++学院 62358888 男,1987年生,硕士,现就读于中国农业大学 Jack PHP学院 66666666 我是澳洲人 Lucy Android学院 88888888 我是美国人 **第三章 Sax解析xml文件** **3.1 SAX方式** 事件驱动,边读边写 **3.2优点** 无需将整个文档加载到内存中,所以内存消耗少,适合解析特别大的xml文件 **3.3SAX解析四部曲** 1.创建工厂:通过newInstance()方法获取 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 2.创建解析器 SAXParser saxParser = saxParserFactory.newSAXParser(); 3.执行parser方法,传入两个参数:xml文件路径、事件处理器 saxParser.parser("Person.xml",new MyDefaultHander1());

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

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

public class SAXParserTest {
public static void main(String[] args) {
try {
//创建解析工厂
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//创建解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
//通过解析器的parser方法
saxParser.parse(“conf/Persons.xml”,new MyDefaultHandler());
} catch (Exception e) {
e.printStackTrace();
}
}
}

class MyDefaultHandler extends DefaultHandler{

@Override
public void startElement(String uri, String localName, String qName,
		Attributes attributes) throws SAXException {
	System.out.println("<" + qName +">");
}

@Override
public void characters(char[] ch, int start, int length)
		throws SAXException {
	System.out.println(new String(ch,start,length));
}

@Override
public void endElement(String uri, String localName, String qName)
		throws SAXException {
	System.out.print("<" + qName + ">");
}

}
执行结果:

zhangsan 20 wangwu 29
		**第四章 使用DOM4J的xPath解析xml文件**

4.1XPath语法
xpath使用路径表达式来选取xml文档中的节点或节点集。节点是通过沿着路径或者步来选取的。
实例一:

<?xml version="1.0" encoding="ISO-8859-1"?> Harry Potter 29.99 Learning XML 39.95

下面列出了最有用的路径表达式:
在这里插入图片描述
在这里插入图片描述

用DOM4J的xpath解析xml文件的代码如下:

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class SysConfigParser {
public static void main(String[] args) {
	try {
	//创建解析器
	SAXReader reader = new SAXReader();
	//通过解析器的read方法将文件读取到内存中,生成一个Document对象树
	Document document = reader.read("conf/sys-config.xml");
	//driver-name节点元素路径:config -> database-info -> driver-name
	//driver-name节点元素的xpath路径:/config/database-info/driver-name
	Element driverNameElt = (Element) document.selectSingleNode("/config/database-info/driver-name");
	//获取drivernameElt节点元素对象的文本内容
	String driverName = driverNameElt.getStringValue();
	System.out.println(driverName);
	
	//url节点元素路径:config -> database-info -> url
	//url节点元素的xpath路径:/config/database-info/url
	//url节点元素的xpath路径:config//url
	//url节点元素的xpath路径://url
	Element urlElt = (Element) document.selectSingleNode("config//url");
	String url = urlElt.getStringValue();
	System.out.println(url);
	
	//user节点元素的路径:config -> database-info -> user
	//user节点元素的xpath路径:/config/database-info/user
	//user节点元素的xpath路径:config//user
	//user节点元素的xpath路径://user
	Element userElt = (Element) document.selectObject("//user");
	String user = userElt.getText();
	System.out.println(user);
	
	//password的元素节点xpath路径://password
	Element passwordElt = (Element) document.selectSingleNode("//password");
	String password = passwordElt.getStringValue();
	System.out.println(password);
	
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}
运行结果:
com.mysql.jdbc.Driver
jdbc:mysql://192.168.1.151:8080/bjpowernode
root
123456

实例二:
xml文件为:

<?xml version="1.0" encoding="UTF-8"?>
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class serverParser {
public static void main(String[] args) {
	try {
	//创建解析器
	SAXReader reader = new SAXReader();
	
	//通过解析器的read方法将文件读取到内存中,生成一个document对象树
	Document document = reader.read("conf/server.xml");
	
	//获取connector节点元素对象的xpath路径:/server/service/connector
	//获取connector节点元素对象的xpath路径:server//connector
	//获取connector节点元素对象的xpath路径://connector
	Element connectorElt = (Element) document.selectSingleNode("//connector");
	
	//获取connector节点元素对象的port属性对象
	Attribute portAttr = connectorElt.attribute("port");
	
	//获取port属性对象的值
	String port1 = portAttr.getStringValue();
	
	String port2 = connectorElt.attributeValue("port");
	
	//输出值
	System.out.println(port1);
	System.out.println(port2);
	
	
	} catch (Exception e) {
		e.printStackTrace();
	}
	
}

}
运行结果:
8080
8080

				第五章 用xpath解析xml文件

准备xml文件

<?xml version="1.0" encoding="UTF-8"?> Harry Potter J K. Rowling 2005 29.99 Everyday Italian Giada De Laurentiis 2005 30.00 Learning XML Erik T. Ray 2003 39.95 XQuery Kick Start James McGovern 2003 49.99

代码如下:
package czk.xml;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class MyXPathTest {
public static void main(String[] args) {
	
	try {
		//创建解析工厂
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
	
		//创建解析器
		DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
		
		//通过解析器读取文件,生成一个Document对象树
		Document document = builder.parse("conf/bookstore.xml");
		
		//创建XPath对象
		XPath xPath = XPathFactory.newInstance().newXPath();
		
		//1.获取bookstore节点下book属性category值为web下的第二个title节点的文本内容
		//bookstore -> book [@category = 'web'][2] -> title
		//XPath路径:/bookstore/book[@category = 'web'][2]/title/text()
		String titleXpath = "/bookstore/book[@category = 'web'][2]/title/text()";
		String titleValue = (String) xPath.evaluate(titleXpath,document,XPathConstants.STRING);
		System.out.println(titleValue);
		
		//2.获取bookstore节点下book属性category值为web的title属性为en的节点内容
		//bookstore ->book[@category='web'] -> title[@lang='en']
		//XPath路径:/bookstore/book[@category='web']/title[@lang='en']/text()
		String titlelangXpath = "/bookstore/book[@category='web']/title[@lang='en']/text()";
		String titlelang = (String) xPath.evaluate(titlelangXpath, document, XPathConstants.STRING);
		System.out.println(titlelang);
		
		//3.获取bookstore下book属性category值为cooking的title的lang属性的值
		//bookstore -> book[@category='cooking'] -> title ->@lang
		//XPath路径:/bookstore/book[@category='cooking']/title/@lang
		String titleLangAttrXpath = "/bookstore/book[@category='cooking']/title/@lang";
		String titleLangAttrValue = (String) xPath.evaluate(titleLangAttrXpath, document, XPathConstants.STRING);
		System.out.println(titleLangAttrValue);
		
		//4.获取bookstore节点下所有book的节点集合
		NodeList booklist = (NodeList) xPath.evaluate("/bookstore/book", document, XPathConstants.NODESET);
		
		//开始遍历booklist
		for(int i = 0;i < booklist.getLength();i++){
			Element bookElt = (Element) booklist.item(i);
			String titleValue01 = (String) xPath.evaluate("title", bookElt, XPathConstants.STRING);
			String authorValue = (String) xPath.evaluate("author", bookElt, XPathConstants.STRING);
			String year = (String) xPath.evaluate("year", bookElt, XPathConstants.STRING);
			String price = (String) xPath.evaluate("price", bookElt, XPathConstants.STRING);
			System.out.println(titleValue01 +" " + authorValue + " " + year + " " + price);
			System.out.println("--------------------");
		}
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

}

运行结果:
XQuery Kick Start
Learning XML
en
Harry Potter J K. Rowling 2005 29.99

Everyday Italian Giada De Laurentiis 2005 30.00

Learning XML Erik T. Ray 2003 39.95

XQuery Kick Start James McGovern 2003 49.99

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值