XML学习重点
结构
固定格式:<?xml version="1.0" encoding="UTF-8" ?>
代表XML的版本 当前文件的编码
元素(Element)也称为标签(Tag),标记(Node) a.标签的组成: <开始标签>标签体</结束标签> b.标签体: i.空 ii.一串文本 iii.还是标签 c.如果标签体为空,也称为空标签,空标签可以这么写:<标签/>(自闭合标签) d.元素名: i.元素名区分大小写 ii.元素名不要使用特殊符号 iii.不建议使用XML相关的开头 e.一个标准的XML应该只有一个根标签 <?xml version="1.0" encoding="UTF-8" ?> <ps> <person id="10086"> <name>jack</name> <age>20</age> </person> <person id="10010"> <name>rose</name> <age>30</age> </person> </ps>
1.属性是元素的一部分,它必须出现在元素的开始标签中; 2.属性的定义格式:属性名="属性值",其中属性值必须是''或者""引起来 3.一个标签的属性可以是任意个,多个属性直接使用空格隔开,但是不能出现同名的属性 4.属性名不能使用特殊符号,必须以字母开头 格式: <a id="002"></>
<!--
注释内容
注释内容
-->
< < > > " " ' ' & & 当XML中出现以上几个特殊字符时,我们建议使用转译字符代替
假设出现了大量需要转译的字符,我们不需要挨个转译,只需要将这些内容放到CDATA区中即可 <![CDATA[ 写大量需要转译的字符 ]]>
public class Dom4JDemo { public static void main(String[] args) throws DocumentException { //1.读取XML的核心类 SAXReader reader = new SAXReader(); Document document = reader.read(Dom4JDemo.class.getResourceAsStream("/books.xml")); //2.获取根元素 Element rootElement = document.getRootElement(); System.out.println("根元素:" + rootElement.getName()); //3.获取根元素的子元素 List<Element> list = rootElement.elements(); //4.遍历集合 for (Element element : list) { System.out.println("子元素:" + element.getName()); //5.获取属性 String id = element.attributeValue("id"); System.out.println("属性id = " + id); //6.获取子子元素 List<Element> elements = element.elements(); //7.遍历 for (Element ele : elements) { System.out.println("子子元素名字:"+ele.getName()); //8.获取子子元素的文本 System.out.println("子子元素内容:"+ele.getText()); } } } }
a.导入jar包(2个jar包,资料中有) b.使用SaxReader读取xml文件 c.使用API和Xpath结合,快速获取结点 public List selectNodes("Xpath表达式");获取符合表达式的元素集合 public Element selectSingleNode("Xpath表达式") 获取符合表达式的唯一元素 1. 绝对路径表达式方式 例如: /元素/子元素/子子元素... 2. 相对路径表达式方式 例如: 子元素/子子元素.. 或者 ./子元素/子子元素.. 3. 全文搜索路径表达式方式 例如: //子元素//子子元素 4. 谓语(条件筛选)方式 例如: //元素[@attr1=value]
a.SaxReader 读取XML文件,并解析生成Document对象 b.Document 就代表XML解析后的文档对象 c.Element 就代表XML的标签/元素 public List<Element> elements([String elementName]); //获取当前标签所有[指定名字]的子标签 public Element element([String elementName]);//获取当前标签的第一个指定名字子标签 public String getName(); //获取当前标签名字 public String getText(); //获取当前标签w文本内容 public String attributeValue(String attributeName);//根据属性名获取当前标签的属性值
//获取id为0002的指定book元素的子标签name的内容 public class Dom4JDemo02 { public static void main(String[] args) throws DocumentException { //1.读取XML的核心类 SAXReader reader = new SAXReader(); Document document = reader.read(Dom4JDemo02.class.getResourceAsStream("/books.xml")); //2.获取id为0002的指定book元素的子标签name的内容 Element element = (Element) document.selectSingleNode("//book[@id=0002]"); //3.获取子标签name Element nameEle = element.element("name"); System.out.println(nameEle.getText()); //System.out.println(element.elementText("name")); } }