xml学习
xml语法
元素、属性、注释
文档声明:<?xml version="1.0" encoding="utf-8" ?>
注释:<!-- 这就是xml注释>
Dom模型---文档对象模型
|--Node
|--Document 文档对象
|--Element标签
|--Attr 属性
|--Text 文本内容
|--Comment 注释
XML解析技术
DOM 技术
DOM解析 dom4j 和 jaxp
6. Dom4j解析技术
开源组织提供的解析XML的开发包!
使用步骤:
1. 添加jar文件
2. 添加到类路径下
常用方法:
doc.getRootElement()根节点
ele.element("");ele的指定名称的第一个子节点
ele.elements();ele的所有子节点
ele.elementText("");ele指定名称的第一个子节点文本内容
// 4. 获取全部信息
@Test
public void readAllInfo() throws DocumentException {
SAXReader reader = new SAXReader();
Document doc = reader.read("src/book.xml");
// 获取根节点
Element root = doc.getRootElement();
// 显示根节点的子元素及所有子孙元素信息
showAllInfo(root);
}
private void showAllInfo(Element root) {
// 输出标签名称
System.out.print("<" + root.getName()+" >");
// 由于属性在标签里,所有在此迭代属性
for (Iterator<Attribute> it = root.attributeIterator();it.hasNext();){
// 获取每一个属性对象
Attribute att = it.next();
// 属性名称与属性值
System.out.print(att.getName() + "=" + att.getText());
}
// 遍历所有的节点
for (Iterator<Node> it = root.nodeIterator(); it.hasNext();) {
// 获取当前元素的每一个节点
Node node = it.next();
// 判断:如果当期节点是标签,递归调用
if (node instanceof Element) {
Element e = (Element) node;
showAllInfo(e);
}
// 文本内容
else if (node instanceof Text) {
Text t = (Text) node;
System.out.print(t.getText());
}
else if (node instanceof Comment) {
Comment c = (Comment) node;
System.out.print("<!--"+c.getText()+"-->");
}
}
System.out.print("</" + root.getName()+">");
}
// 3. 获取编号为“A002” 的书的售价
@Test
public void readBookNameByNo() throws DocumentException {
SAXReader reader = new SAXReader();
Document doc = reader.read("src/book.xml");
// 1. 得到根节点
Element root = doc.getRootElement();
// 2. 遍历根节点
for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
// 3. 拿到每一个子节点(书)
Element book = it.next();
// 4. 得到属性
String bookNo = book.attributeValue("编号");
// 5. 判断, 找到编号为A002的书信息,再取出售价
if ("A001".equals(bookNo)) {
String price = book.elementText("售价");
System.out.println(price);
break;
}
}
}
// 2. 获取第二本书,书名
@Test
public void readElement2() throws DocumentException {
// 解析器
SAXReader reader = new SAXReader();
Document doc = reader.read("src/book.xml");
// 根
Element root = doc.getRootElement();
// root节点下所有子节点的列表
List<Element> list = root.elements();
// 获取第二本书
Element sen_book = list.get(1);
// 获取书名节点
// Element bookName = sen_book.element("书名");
// System.out.println(bookName.getText());
String bookName = sen_book.elementText("书名");
System.out.println(bookName);
}
// 1. 获取第一本书,书名
@Test
public void readElement() throws DocumentException {
// 获取解析器
SAXReader reader = new SAXReader();
// 通过解析器拿到文档对象
Document doc = reader.read("src/book.xml");
// 获取根节点
Element root = doc.getRootElement();
// 获取“书”节点 (获取root节点下第一个子节点)
Element ele_book = root.element("书");
// 获取"书" 节点下“书名”子节点
Element ele_bookName = ele_book.element("书名");
// 获取文本
String bookName = ele_bookName.getText();
System.out.println(bookName);
}
ele.attributeIterator(); 迭代ele标签的所有属性
ele.nodeIterator(); 迭代ele标签的所有节点