解析xml数据
来源:互联网 发布:网络水军公司bjiko 编辑:程序博客网 时间:2024/06/06 02:54
xml数据的解析,需要用到dom4j这个jar包。dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j-1.6.1的完整版大约11.2M,是一个名为dom4j-1.6.1.zip的压缩包,解压后除了需要导入dom4j-1.6.1.jar外,还需导入jaxen-1.1-beta-6.jar(否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常)。下载dom4j-1.6.1
1. 往xml文件写入数据
package CreateXmlFile;import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class TestCreateXmlFile {public static void main(String[] args) {Document document = DocumentHelper.createDocument(); // 创建Document对象document.addComment("这是商店的一个xml文件"); // 添加注释Element root = document.addElement("store"); // 创建根节点root.addAttribute("name", "文具店");root.addAttribute("address", "北京朝阳区");Element pen = root.addElement("pen");pen.addComment("钢笔品牌/价格");Element penName = pen.addElement("penName");penName.setText("英雄");Element penPrice = pen.addElement("penPrice");penPrice.setText("1元");Element box = root.addElement("box");box.addComment("铅笔盒名字/价格");Element boxName = box.addElement("boxName");boxName.setText("小二郎");Element boxPrice = box.addElement("boxPrice");boxPrice.setText("2元");Element drink = root.addElement("drink");drink.addComment("墨水品牌/价格");Element drinkName = drink.addElement("drinkName");drinkName.setText("中华");Element drinkPrice = drink.addElement("drinkPrice");drinkPrice.setText("3元");// 写入到xml文件XMLWriter writer = null;OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8"); // 指定XML编码try {writer = new XMLWriter(new FileWriter("E:/MyEclipse/xml/store.xml"), format);writer.write(document);} catch (IOException e) { e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("success");}}
E:/MyEclipse/xml/store.xml :
<?xml version="1.0" encoding="utf-8"?><!--这是商店的一个xml文件--><store name="文具店" address="北京朝阳区"> <pen> <!--钢笔品牌/价格--> <penName>英雄</penName> <penPrice>1元</penPrice> </pen> <box> <!--铅笔盒名字/价格--> <boxName>小二郎</boxName> <boxPrice>2元</boxPrice> </box> <drink> <!--墨水品牌/价格--> <drinkName>中华</drinkName> <drinkPrice>3元</drinkPrice> </drink></store>
2. 修改数据
E:/MyEclipse/xml/book1.xml :
<?xml version="1.0" encoding="utf-8"?><books> <!--这是book.xml文件, 2017.10.16--> <book show="ono"> <name>神话</name> <price>66</price> </book> <book show="yes"> <name>红楼梦</name> <price>88</price> </book> <book show="no"> <name>三国志</name> <price>99</price> </book> <user>赵凯鹏</user> </books>
package ModifyXmlFile;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class TestModifyXmlFile {public static void main(String[] args) {SAXReader reader = new SAXReader();Document document = null;try {document = reader.read(new File("E:/MyEclipse/xml/book1.xml"));Element root = document.getRootElement();// 1、给第二个book添加子节点date//List bookList = root.selectNodes("/books/book");//Element secondBook = (Element) bookList.get(1);//Element date = secondBook.addElement("date");//date.setText("2008-08-08");//System.out.println("success1");// 2、删除date节点//List bookList = root.selectNodes("/books/book");//stop: for(int i=0; i<bookList.size(); i++){//Element father = (Element)bookList.get(i);//List childList = father.elements(); //for(int j=0; j<childList.size(); j++){//Element child = (Element) childList.get(j);//if(child.getName().equals("date")){//father.remove(child);//break stop;//}//}// }//System.out.println("success2");// 3、修改第一个book的name为神话//List bookList = root.selectNodes("/books/book");//Element firstBook = (Element) bookList.get(0);//firstBook.element("name").setText("神话");//System.out.println("success3");// 4、给第一个book添加属性version//List bookList = root.selectNodes("/books/book");//Element firstBook = (Element) bookList.get(0);//firstBook.addAttribute("version", "v2.0");//System.out.println("success11");// 5、删除version//List bookList = root.selectNodes("/books/book");//Element firstBook = (Element) bookList.get(0);//Attribute version = firstBook.attribute("version");//firstBook.remove(version);//System.out.println("success22");// 6、修改第一个book的show为noList bookList = root.selectNodes("/books/book");Element firstBook = (Element) bookList.get(0);firstBook.setAttributeValue("show", "ono");//firstBook.attribute("show").setText("nono");;System.out.println("success33");} catch (DocumentException e) {e.printStackTrace();}// 保存修改到原文件<==>写入文件XMLWriter writer = null;OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8"); // 指定XML编码try {writer = new XMLWriter(new FileWriter("E:/MyEclipse/xml/book1.xml"), format);writer.write(document);} catch (IOException e) {e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("end success");}}
3. 从xml文件读出数据
E:/MyEclipse/xml/book.xml :
<?xml version="1.0" encoding="UTF-8"?><!--这是文档注释1--><!--这是文档注释2--><books><!--这是元素注释3--><!--这是元素注释4--><book show="yes"><name>西游记</name><price>66</price></book><book show="yes"><name>红楼梦</name><price>88</price></book><book show="no"><name>三国志</name><price>99</price></book><user>赵凯鹏</user></books>
package ReadXmlFile;import java.io.File;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Comment;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class TestReadXmlFile {public static void main(String[] args) {//读取XML文件,获得document对象SAXReader reader = new SAXReader(); try { reader.setEncoding("utf-8");Document document = reader.read(new File("E:/MyEclipse/xml/book.xml"));System.out.println(document.node(0).getText()); // 看文档可知, 其是文档的第一个节点System.out.println(document.node(1).getText()); // 看文档可知, 其是文档的第二个节点System.out.println("文档节点数----"+document.nodeCount());Element root = document.getRootElement();System.out.println(root.getName());System.out.println(root.node(1).getText()); // 元素中的注释(看文档可知, 其是根节点的第一个节点)System.out.println(root.node(2).getText());System.out.println("根节点节点数-----"+root.nodeCount());// 用集合遍历//List bookList = root.elements("book");List bookList = root.selectNodes("/books/book"); // 用xpath查找节点books下的book元素if(bookList.size()>0){for(int i=0; i<bookList.size(); i++){Element book = (Element) bookList.get(i);Attribute bookAttribute = book.attribute("show");System.out.println(book.getName()+" "+bookAttribute.getName()+"="+bookAttribute.getText());Element name = book.element("name");System.out.println(name.getName()+":"+name.getText());Element price = book.element("price");System.out.println(price.getName()+":"+price.getText());System.out.println("-----------------------");}}// 迭代遍历//Iterator bookIterator = root.elementIterator("book");//while(bookIterator.hasNext()){//Element book = (Element) bookIterator.next();//System.out.println(book.getName()+" "+book.attribute("show").getName()+"="+book.attributeValue("show"));////Element name = book.element("name");//System.out.println(name.getName()+":"+name.getText());//Element price = book.element("price");//System.out.println(price.getName()+":"+price.getText());//System.out.println("-----------------------");//} Element user = root.element("user");System.out.println(user.getName()+":"+user.getText());} catch (DocumentException e) {e.printStackTrace();} }}
控制台:
这是文档注释1这是文档注释2文档节点数----3books这是元素注释3根节点节点数-----13book show=yesname:西游记price:66-----------------------book show=yesname:红楼梦price:88-----------------------book show=noname:三国志price:99-----------------------user:赵凯鹏
4. String、xml互转
package XmlToString;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class TestXmlToString {public static void main(String[] args) {// String ==> Xml, 解析XML形式的文本,得到document对象.String text = "<members>赵凯鹏</members>"; try {Document document = DocumentHelper.parseText(text);Element root = document.getRootElement();System.out.println(root.getName()+":"+root.getText());} catch (DocumentException e) {e.printStackTrace();} //XML ==> String SAXReader reader = new SAXReader(); Document document;try {document = reader.read(new File("E:/MyEclipse/xml/book1.xml"));Element root=document.getRootElement(); System.out.println(document.asXML()); // 整个xml文件的文本内容 System.out.println(root.asXML()); // 根节点文本内容 List list=root.elements("book"); Element firstBook=(Element)list.get(0); System.out.println(firstBook.asXML()); // 第一个book的name节点} catch (DocumentException e) {e.printStackTrace();} }}
参考:dom4j完全教程
阅读全文
0 0
- oracle解析xml数据
- 解析XML格式数据
- Jdom 解析XML数据
- jquery 解析 xml数据
- xml数据解析
- xml数据的解析
- Android---解析XML数据
- xml形式数据解析
- xml数据解析
- XML数据解析
- js解析XML数据
- 解析XML数据
- iOS xml数据解析
- 解析XML数据
- xml数据解析
- XML数据的解析
- xml数据解析方法
- XML、JSON数据解析
- html初学
- python 八皇后问题
- OpenCV产生随机数及Point类型转换
- 详解nginx反向代理+SwitchHost+Tomcat绑定域名配置总结
- 神州数码:输入一个字符串: (1)输出出现次数最少的字符 (2)删除出现次数最少的字符并输出字符串
- 解析xml数据
- 合并序列
- fgetc,fgets实现文件的copy
- skyline里的group
- GET vs POST 区别
- select简述,时区,date,time数据类型
- P1868 饥饿的奶牛
- [2017纪中10-30]Group DP+差分优化
- HDU2295-Radar