xml书写规范及解析

xml书写规范1.xml不区分大小写,但是XML大写敏感。2.xml标签不能使用关键字,例如 XML  version3.正确嵌套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:


<books><book_name bm="文学经典">红楼梦book_name><book_author>曹雪芹book_author><book_price>500book_price>	book><book_name bm="童年经典">西游记book_name><book_author>吴承恩book_author><book_price>600book_price>	book><book_name bm="教育资料">坏蛋是怎么样练成的book_name><book_author>六道book_author><book_price>1000book_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;@Beforepublic void bf() throws Exception {//定义解析器reader = new SAXReader();InputStream is = Dom4j.class.getClassLoader().getResourceAsStream("books.xml");//System.out.println(is);//获取当前文件的文档对象doc = reader.read(is);}/** 获取根节点:books* */@Testpublic 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* ----------------------------* */@Testpublic 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* */@Testpublic 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;@Beforepublic void bf() throws Exception {//定义解析器reader = new SAXReader();InputStream is = Dom4j.class.getClassLoader().getResourceAsStream("books.xml");//System.out.println(is);//获取当前文件的文档对象doc = reader.read(is);}/** 根据当前标签的路径取值* 红楼梦* 西游记* 坏蛋是怎么样练成的* */@Testpublic void method() {//重要就是表达式List<Element> selectNodes = doc.selectNodes("/books/book/book_name");for(Element e : selectNodes) {System.out.println(e.getText());}}/** 根据当前标签的路径取值* 更简单的方式* 红楼梦* 西游记* 坏蛋是怎么样练成的* */@Testpublic void method02() {//重要就是表达式List<Element> selectNodes = doc.selectNodes("//book_name");for(Element e : selectNodes) {System.out.println(e.getText());}}/** 获取书名+作者+价钱* 9* 红楼梦* 曹雪芹* 500* 西游记* 吴承恩* 600* 坏蛋是怎么样练成的* 六道* 1000* */@Testpublic void method03() {//重要就是表达式List<Element> selectNodes = doc.selectNodes("//book/*");System.out.println(selectNodes.size());for(Element e : selectNodes) {System.out.println(e.getText());}}/** book下的第二个元素* 3* 曹雪芹* 吴承恩* 六道* */@Testpublic void method04() {//重要就是表达式List<Element> selectNodes = doc.selectNodes("//book/*[2]");System.out.println(selectNodes.size());for(Element e : selectNodes) {System.out.println(e.getText());}}/** 获取书的别名* 3* 文学经典* 童年经典* 教育资料* */@Testpublic 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"));}}/** 获取书的别名为教育资料* 坏蛋是怎么样练成的* */@Testpublic void method06() {//重要就是表达式/*List 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* */@Testpublic void method07() {System.out.println(doc.selectNodes("//book").size());}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部