JSP学习笔记(7)_xml文件解析
关于xml文件的几种解析方法。
1.xml
XML: extensiable markup language 可扩展标记语言
特点:标记可以由用户自己随意扩展.
作用:
1.做其它技术的配置文件
2.在不同语言环境下交换数据
注意:使用以下xml解析方法要导包
2.解析方法
2.1 jdom
2.2 dom4j
实现:利用dom4j实现xml文件的增删查改
import java.io.File; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.dom4j.tree.DefaultElement; public class Test01 { public static void main(String[] args) throws Exception { //查看 find(); //增加 //add(); //修改 //update(); //删除 //delete(); }
private static void delete() throws Exception { // 创建解析器 SAXReader sr = new SAXReader(); //解析xml文件,得到document对象 Document document = sr.read(new File("src/books.xml")); //获取根节点,再获取子节点 Element root = document.getRootElement(); List<Element> list = root.elements(); //删除方法一 // Element t=null; // //修改水浒传为88元 // for (Element book : list) { // Element title = book.element("title"); // if("水浒传".equals(title.getText())){ // t=book; // break; // } // } // list.remove(t); //删除方法二 int size = list.size(); for (int i = 0; i < size; i++) { Element book = list.get(i); Element title = book.element("title"); if("水浒传".equals(title.getText())) { list.remove(book); break; } } //存盘 OutputFormat of = OutputFormat.createPrettyPrint(); XMLWriter xw = new XMLWriter(new FileOutputStream("src/books.xml"), of); xw.write(document); System.out.println("删除成功!"); } private static void update() throws Exception { // 创建解析器 SAXReader sr = new SAXReader(); //解析xml文件,得到document对象 Document document = sr.read(new File("src/books.xml")); //获取根节点,再获取子节点 Element root = document.getRootElement(); List<Element> list = root.elements(); Element t=null; //修改水浒传为88元 for (Element book : list) { Element title = book.element("title"); if("水浒传".equals(title.getText())){ Element price = book.element("price"); price.setText("88"); break; } } //存盘 OutputFormat of = OutputFormat.createPrettyPrint(); XMLWriter xw = new XMLWriter(new FileOutputStream("src/books.xml"), of); xw.write(document); System.out.println("修改成功!"); } private static void add() throws Exception { // 创建解析器 SAXReader sr = new SAXReader(); //解析xml文件,得到document对象 Document document = sr.read(new File("src/books.xml")); //获取根节点,再获取子节点 Element root = document.getRootElement(); List<Element> list = root.elements(); Element book = new DefaultElement("book"); Element title = new DefaultElement("title"); Element price = new DefaultElement("price"); Element description = new DefaultElement("description"); price.setAttributeValue("unit","元"); title.setText("水浒传"); price.setText("55"); description.setText("3个女人和105个男人的故事"); book.add(title); book.add(price); book.add(description); list.add(book); //存盘 OutputFormat of = OutputFormat.createPrettyPrint(); XMLWriter xw = new XMLWriter(new FileOutputStream("src/books.xml"), of); xw.write(document); System.out.println("添加成功!"); } private static void find() throws Exception { // 创建解析器 SAXReader sr = new SAXReader(); //解析xml文件,得到document对象 Document document = sr.read(new File("src/books.xml")); //获取根节点,再获取子节点 Element root = document.getRootElement(); List<Element> list = root.elements(); for (Element book : list) { System.out.println("-----------------------"); System.out.println(book.getName()); Element title = book.element("title"); Element price = book.element("price"); Attribute unit = price.attribute("unit"); Element description = book.element("description"); System.out.println("title:"+title.getText()); System.out.println("price:"+price.getText()+unit.getValue()); System.out.println("description:"+description.getText()); } } }
2.3 sax
实现:利用sax实现xml文件解析-查看书名“title”
截图:import javax.xml.parsers.SAXParser; import org.apache.xerces.jaxp.SAXParserFactoryImpl; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class Test{ public static void main(String[] args) throws Exception { find(); } private static void find() throws Exception { //创建解析器 SAXParserFactoryImpl spf = new SAXParserFactoryImpl(); SAXParser sp = spf.newSAXParser(); XMLReader reader = sp.getXMLReader(); //设置事件 reader.setContentHandler(new DefaultHandler(){ private String flag; @Override //碰到标记开始 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); flag = qName; } @Override //碰到内容开始 public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); if("title".equals(flag)){ System.out.println(new String(ch,start,length)); } } @Override //碰到结束标志开始 public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); } }); //使用reader去解析一个xml文件,这是没有document对象生成 reader.parse("src/books.xml"); } }
2.4 Xpath的部分实例
import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Test { public static void main(String[] args) throws Exception { //test1(); //test2(); //test3(); //test4(); //test5(); //test6(); //test7(); //test8(); //test9(); test10(); } private static void test10() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test10.xml")); //使用Xpath List<Element> list = read.selectNodes("//CCC|//BBB"); for (Element element : list) { System.out.println(element.getName()); } } private static void test9() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test9.xml")); //使用Xpath List<Element> list = read.selectNodes("//*[string-length(name()) = 3]"); for (Element element : list) { System.out.println(element.getName()); } } private static void test8() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test8.xml")); //使用Xpath List<Element> list = read.selectNodes("//*[name()='BBB']"); for (Element element : list) { System.out.println(element.getName()); } } private static void test7() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test7.xml")); //使用Xpath//*[count(BBB)=2] List<Element> list = read.selectNodes("//*[count(BBB)=2]"); for (Element element : list) { System.out.println(element.getName()); } } private static void test6() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test6.xml")); //使用Xpath List<Element> list = read.selectNodes("//BBB[@id='b1']"); for (Element element : list) { System.out.println(element.getName()); } } private static void test5() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test5.xml")); //使用Xpath List<Element> list = read.selectNodes("//BBB[@id]"); for (Element element : list) { System.out.println(element.getName()); } } private static void test4() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test4.xml")); //使用Xpath List<Element> list = read.selectNodes("/AAA/BBB[1]"); for (Element element : list) { System.out.println(element.getName()); } } private static void test3() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test3.xml")); //Xpath List<Element> list = read.selectNodes("/AAA/CCC/DDD/*"); for (Element element : list) { System.out.println(element.getName()); } } private static void test2() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document read = sr.read(new File("src/test2.xml")); //使用Xpath List<Element> list = read.selectNodes("//BBB"); for (Element element : list) { System.out.println(element.getName()); } } private static void test1() throws Exception { //创建解析器 SAXReader sr = new SAXReader(); //解析xml文件 Document document = sr.read(new File("src/test1.xml")); //使用Xpath List<Element> list = document.selectNodes("/AAA"); //遍历打印 for (Element element : list) { System.out.println(element.getName()); } } }