《二 、利用SAX进行DOM解析DOM4J的基本练习》
一、 本次总结用到的xml文档
<?xml version="1.0" encoding="UTF-8"?>
<书架>
<书 出版社="人民出版社">
<书名>三国演义</书名>
<作者>罗贯中</作者>
<售价>100</售价>
<内部价>99</内部价>
</书>
<书>
<书名>西游记</书名>
<作者>吴承恩</作者>
<售价>1</售价>
</书>
</书架>
二 、SAX进行解析的方法:
**在xml文档中得到某个节点的具体内容:例如:得到第二本书的作者
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml');
2、得到根元素
Element root = document.getRootElement();
3、找到第二本书
List<Element> secodBook =root.elements("书");//得到根元素的子元素
Element book = secodBook.get(1);//得到第二本书
4、找到第二本书的作者
Element Author = book.element("作者");
5、拿到内容输出内容
system.out.println("请输出得到的内容"+Author.getText());
Assert.assertEquals("吴承恩",Author.getText());//JUnit测试中获取到的值和自己预期的值是否相等
三、SAX解析:遍历xml文档中所有的元素节点
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml');
2、得到根元素
Element root = document.getRootElement();
treeWorker(root);//使用treeWorker方法,遍历元素进行,打印他们的名字
3、创建treeWorker()方法
private void treeWorker(root){
system.out.println(root.getName());
List<Element> es = root.elements();//这是个元素的list集合,带有范型
//循环循环输出
for(Element e: es){//增强for循环打印输出
treeWorker(e);//调用treeWorker()方法进行循环遍历
}
}
四、SAX解析:修改某个元素节点的主题内容:例如:修改第二本书的售价
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
2、得到根元素
Element root = document.getRootElement();
3、得到第二本书的售价
List<Element> book = root.elements("书");
Element secondBook = book.get(1);//获取第二本书
Element secondBookPrice = secondBook.element("售价");//获取到第二本书的售价
//设置文本内容
secondBookPrice。setText("666666");
//写回到xml文档中
OutputStream out = new FileOutputStream();
OutputFormat format = OutputFormat.createrPrettyPrint();
format.setEncoding("UTF-8");//设定编码格式
XMLWriter writer = new XMLWirter(out,format);
writer.write(docuemnt);//写回到xml文档中
writer.close();//关闭输出流
五、SAX解析:向指定元素节点中增加子元素节点:给第一本书添加批发价
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
2、得到根元素
Element root = document.getRootElement();
3、得到第一本书
Element firstBook = root.element("书");
//添加标签及其文本内容
firstBook.addElement("批发价").setText("333");
4、写回到xml文档中
OutputStream out = new FileOutputStream();
OutputFormat format = OutputFormat.createrPrettyPrint();
format.setEncoding("UTF-8");//设定编码格式
XMLWriter writer = new XMLWirter(out,format);
writer.write(docuemnt);//写回到xml文档中
writer.close();//关闭输出流
六、SAX解析:向指定元素节点增加同级元素节点:在第一本书售价的前面添加内部价
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
2、得到根元素
Element root = document.getRootElement();
3、得到第一本书
Element firstBook = root.element("书");
List<Element> children = firstBook.elements();//得到第一本书的所有子元素节点:List
//借助DocumentHelper创建内部元素价
Element price= DocumentHelper.createElement("内部价");
price.setText("99");
4、写回到xml文档中
OutputStream out = new FileOutputStream();
OutputFormat format = OutputFormat.createrPrettyPrint();
format.setEncoding("UTF-8");//设定编码格式
XMLWriter writer = new XMLWirter(out,format);
writer.write(docuemnt);//写回到xml文档中
writer.close();//关闭输出流
七、SAX解析:删除指定元素节点:删除第一本书的批发价
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
2、得到根元素
Element root = document.getRootElement();
3、得到第一本书
Element firstBook = root.element("书");
Element price= firstBook.element("批发价");//使用上层的父元素进行删除
firstBook.remove(price);
4、写回到xml文档中
OutputStream out = new FileOutputStream();
OutputFormat format = OutputFormat.createrPrettyPrint();
format.setEncoding("UTF-8");//设定编码格式
XMLWriter writer = new XMLWirter(out,format);
writer.write(docuemnt);//写回到xml文档中
writer.close();//关闭输出流
八、、SAX解析:操作xml文件属性:第一本书添加出版社属性
1、得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/book.xml");
2、得到根元素
Element root = document.getRootElement();
3、得到第一本书
Element firstBook = root.element("书");
firstBook.setAttribute("出版社","人民出版社");
4、写回到xml文档中
OutputStream out = new FileOutputStream();
OutputFormat format = OutputFormat.createrPrettyPrint();
format.setEncoding("UTF-8");//设定编码格式
XMLWriter writer = new XMLWirter(out,format);
writer.write(docuemnt);//写回到xml文档中
writer.close();//关闭输出流