Xml入门

XML介绍

Extensible Markup Language(可扩展标记语言) 标签自定义。
HyperText markup Language (超文本标记语言)

结构 | 传输数据 | 标记信息 | 跨平台

XML结构

XML头信息 必须存在的

<?xml > 声明当前文件是XML文件 version 声明当前XML版本 1.0 encoding 编码格式 声明当前XML中的编码格式 XML中发现了一些特殊的信息,这些信息叫“约束” ,法律法规。 XML定义标签时的规范 HTML不区分大小写,但是XML大小写敏感。 XML中标签不能使用关键字 例如:XML 、version等... XML中标签需要正确嵌套 开始标签和结束标签 XML中定义标签不能以数字开头 HTML中可以有多个根目录约束不严格,XML只能有一个唯一的一个根标签。 创建一个XML文件 作为数据传输使用的类型 数据传输的时候可以直接将整个文件传到指定的位置,但是读取文件的时候需要使用Java中解析文件的技术 jaxp : sun公司出品。 sun自己的内部员工都不用。 jdom解析:开源社区大牛们创建的出来。风靡全球。 dom4J : 当今最火的解析技术。 4 取自 for 的谐音。 dom for java 甚至很多框架内置dom4J。 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; /** * 解析XML文件 * @author IBM * 顺藤摸瓜 */ public class Dom4J { private Document doc = null; //读取当前文件 @Before public void bf() throws DocumentException { //定义一个解析器 SAXReader reader = new SAXReader(); //获取输入流 InputStream is = Dom4J.class.getClassLoader().getResourceAsStream("book.xml"); //获取当前文件的文档对象 doc = reader.read(is); } //获取根节点信息 @Test public void t01() throws DocumentException { Element root = doc.getRootElement(); String name = root.getName(); System.out.println(name); } //获取根节点下的子节点 @Test public void t02() throws DocumentException { Element root = doc.getRootElement(); List list = root.elements(); for (Element et : list) { //获取每一个节点的名称 System.out.println(et.getName()); //获取当前book标签的属性 -根据索引获取属性对象 Attribute attr = et.attribute(0); System.out.println(attr.getName() + ":" + attr.getValue()); //可以直接根据属性名称获取值 System.out.println("根据属性名称获取值:"+et.attributeValue("xh")); System.out.println("----------------"); } } //获取书名 @Test public void t03() throws DocumentException { Element root = doc.getRootElement(); List list = root.elements(); for (Element et : list) { //打印书的序号 System.out.println("序号:"+et.attributeValue("xh")); //获取每个book的子节点 List book_list = et.elements(); //继续循环获取到的book的子节点 for (Element book_et : book_list) { //获取当前标签的文字信息 String text = book_et.getText(); String v = book_et.attributeValue("bm"); if(null == v) { System.out.println(text); }else { System.out.println(text + "("+v+")"); } } System.out.println("============="); } } } 练习:基本取值必会。 XPath技术 Dom4J为了让解析XML更加方便采用的全局搜索这样的一个功能,需要导包 这个技术是依赖Dom4J Dom4J提供两个方法给XPath使用 doc.selectNodes(); //检索节点返回集合 doc.selectSingleNode(); //检索节点返回单个对象 xpath需要先使用Dom4J获取当前的Document对象才能继续操作。 Xpath代码示例 import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.junit.Before; import org.junit.Test; /** * Xpath技术的使用 * @author IBM * */ public class TestXpath { private Document doc = null; //读取当前文件 @Before public void bf() throws DocumentException { //定义一个解析器 SAXReader reader = new SAXReader(); //获取输入流 InputStream is = Dom4J.class.getClassLoader().getResourceAsStream("book.xml"); //获取当前文件的文档对象 doc = reader.read(is); } //根据当前标签路径取值 @Test public void t01() { //重要是表达式 List list = doc.selectNodes("/books/book/book_name"); for (Element element : list) { System.out.println(element.getText()); } } //更简单的方式获取书名 @Test public void t02() { List list = doc.selectNodes("//book_name"); for (Element element : list) { System.out.println(element.getText()); } } //获取书名+作者+价钱 @Test public void t03() { List list = doc.selectNodes("//book/*"); for (Element element : list) { System.out.println(element.getText()); } } //取book下子元素中第二个元素 @Test public void t04() { List list = doc.selectNodes("//book/*[2]"); for (Element element : list) { System.out.println(element.getText()); } } //获取书的别名 @Test public void t05() { List list = doc.selectNodes("//book/*[1][@bm]"); for (Element element : list) { System.out.println(element.attributeValue("bm")); } } //获取别名为石头记的书名 @Test public void t06() { // List list = doc.selectNodes("//book_name[@bm='石头记']"); // for (Element element : list) { // System.out.println(element.getText()); // } Node node = doc.selectSingleNode("//book_name[@bm='石头记']"); System.out.println(node.getText()); } //统计一共有几本书 @Test public void t07() { List list = doc.selectNodes("//book"); System.out.println(list.size()); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值