xml书写规范
1.xml不区分大小写,但是XML大写敏感。
2.xml标签不能使用关键字,例如 XML version
3.正确嵌套
4.不能以数字开头
5.只能有一个根标签
当服务器传输过来的数据结构为xml,需要解析xml结构,帮数据获取到
解析xml技术
jaxp:sun公司出品,sun公司自己内部的员工不用
jdom解析:开源社区大牛创建出来的,风靡全球
dom4j(dom for java):当今最火的解析技术。****** dom for java i18n i...n log4j
XPath技术
DOM4J为了让解析XML更加方便采用的全局搜索这么一个功能,需要导包
XPath依赖dom4j技术。
doc.selectNodes(表达式):检索节点返回集合
doc.selectSingleNode():检索节点返回单个对象
xpath需要行使用dom4j获取当前的doc对象。
例题(记得导包):
books.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book xh = "1">
<book_name bm="文学经典">红楼梦</book_name>
<book_author>曹雪芹</book_author>
<book_price>500</book_price>
</book>
<book xh = "2">
<book_name bm="童年经典">西游记</book_name>
<book_author>吴承恩</book_author>
<book_price>600</book_price>
</book>
<book xh = "3">
<book_name bm="教育资料">坏蛋是怎么样练成的</book_name>
<book_author>六道</book_author>
<book_price>1000</book_price>
</book>
</books>
dom4j:

package text.dom4j;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Before;
import org.junit.Test;
public class Dom4j {
SAXReader reader = null;
Document doc = null;
@Before
public void bf() throws Exception {
//定义解析器
reader = new SAXReader();
InputStream is = Dom4j.class.getClassLoader().getResourceAsStream("books.xml");
//System.out.println(is);
//获取当前文件的文档对象
doc = reader.read(is);
}
/*
* 获取根节点:books
* */
@Test
public void method01() {
//根节点对象
Element root = doc.getRootElement();
String name = root.getName();
System.out.println(name);
}
/*
* 获取根节点下的子节点
* book
* xh...1
* 1
* ----------------------------
* book
* xh...2
* 2
* ----------------------------
* book
* xh...3
* 3
* ----------------------------
* */
@Test
public void method02() {
Element root = doc.getRootElement();
//获取到所有子节点
List<Element> elements = root.elements();
for(Element e : elements) {
System.out.println(e.getName());
Attribute attr = e.attribute(0);
System.out.println(attr.getName()+"..."+attr.getValue());
//直接根据属性名称获取值
String val = e.attributeValue("xh");
System.out.println(val);
System.out.println("----------------------------");
}
}
/*
* 获取书名
* 3
* 红楼梦
* 文学经典
* 曹雪芹
* 500
* 3
* 西游记
* 童年经典
* 吴承恩
* 600
* 3
* 坏蛋是怎么样练成的
* 教育资料
* 六道
* 1000
* */
@Test
public void method03() {
Element root = doc.getRootElement();
//获取到所有子节点
List<Element> elements = root.elements();
for(Element et : elements) {
String attr = et.getName()+"..."+et.attribute(0).getName()+"..."+et.attribute(0).getValue();
//获取每个 book的子节点
List<Element> list = et.elements();
System.out.println(list.size());
//遍历book的子节点
for(Element e : list) {
//获取当前标签的文字信息
String str = e.getText();
System.out.println(str);
String val = e.attributeValue("bm");
//System.out.println(val);
if(val!=null) {
System.out.println(val);
}
}
}
}
}
XPath:

package text.dom4j;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Before;
import org.junit.Test;
public class TestXpath {
SAXReader reader = null;
Document doc = null;
@Before
public void bf() throws Exception {
//定义解析器
reader = new SAXReader();
InputStream is = Dom4j.class.getClassLoader().getResourceAsStream("books.xml");
//System.out.println(is);
//获取当前文件的文档对象
doc = reader.read(is);
}
/*
* 根据当前标签的路径取值
* 红楼梦
* 西游记
* 坏蛋是怎么样练成的
* */
@Test
public void method() {
//重要就是表达式
List<Element> selectNodes = doc.selectNodes("/books/book/book_name");
for(Element e : selectNodes) {
System.out.println(e.getText());
}
}
/*
* 根据当前标签的路径取值
* 更简单的方式
* 红楼梦
* 西游记
* 坏蛋是怎么样练成的
* */
@Test
public void method02() {
//重要就是表达式
List<Element> selectNodes = doc.selectNodes("//book_name");
for(Element e : selectNodes) {
System.out.println(e.getText());
}
}
/*
* 获取书名+作者+价钱
* 9
* 红楼梦
* 曹雪芹
* 500
* 西游记
* 吴承恩
* 600
* 坏蛋是怎么样练成的
* 六道
* 1000
* */
@Test
public void method03() {
//重要就是表达式
List<Element> selectNodes = doc.selectNodes("//book/*");
System.out.println(selectNodes.size());
for(Element e : selectNodes) {
System.out.println(e.getText());
}
}
/*
* book下的第二个元素
* 3
* 曹雪芹
* 吴承恩
* 六道
* */
@Test
public void method04() {
//重要就是表达式
List<Element> selectNodes = doc.selectNodes("//book/*[2]");
System.out.println(selectNodes.size());
for(Element e : selectNodes) {
System.out.println(e.getText());
}
}
/*
* 获取书的别名
* 3
* 文学经典
* 童年经典
* 教育资料
* */
@Test
public void method05() {
//重要就是表达式
List<Element> selectNodes = doc.selectNodes("//book/*[1][@bm]");
System.out.println(selectNodes.size());
for(Element e : selectNodes) {
System.out.println(e.attributeValue("bm"));
}
}
/*
* 获取书的别名为教育资料
* 坏蛋是怎么样练成的
* */
@Test
public void method06() {
//重要就是表达式
/*List<Element> selectNodes = doc.selectNodes("//book_name[@bm='教育资料']");
System.out.println(selectNodes.size());
for(Element e : selectNodes) {
System.out.println(e.attributeValue("bm"));
}*/
Node node = doc.selectSingleNode("//book_name[@bm='教育资料']");
System.out.println(node.getText());
}
/*
* 总共多少本书
* 3
* */
@Test
public void method07() {
System.out.println(doc.selectNodes("//book").size());
}
}

本文探讨了XML的书写规范,结合示例文件books.xml,深入讲解了如何使用DOM4J库进行XML解析,并介绍了XPath表达式在XML数据查找中的应用。
1008

被折叠的 条评论
为什么被折叠?



