使用Dom4j对XML文档创建与解析
Posted lazyli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Dom4j对XML文档创建与解析相关的知识,希望对你有一定的参考价值。
创建XML文件:
public class Dom4jCreateXml { public void testCreatXml() { //创建文档对象 Document document = DocumentHelper.createDocument(); //创建跟节点 Element root = document.addElement("students"); //根据根节点创建子节点 Element stu01 = root.addElement("student"); //添加student子节点id属性 stu01.addAttribute("id", "001"); //根据student子节点创建name子节点 Element stu01Name = stu01.addElement("name"); //给子节点name添加文本 stu01Name.addText("zhangsan"); //根据stu01创建子节点age Element stu01Age = stu01.addElement("age"); //给子节点age添加文本 stu01Age.addText("23"); //设置输出编码格式 OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("utf-8"); //输出指定的xml文件 Writer out; try { out = new FileWriter("E://lazyli/test.xml"); //创建XML输出对象,以指定的格式输出 XMLWriter writer = new XMLWriter(out, format); writer.write(document); System.out.println("生成xml文件成功!"); out.close(); } catch (Exception e) { System.out.println("生成xml文件失败!"); e.printStackTrace(); } } /** * 创建一个html格式的xml * <?xml version="1.0" encoding="UTF-8"?> * <Packet type="REQUEST" version="1.0"> * <Head> * <RequestID> AC00003900021456305194844</RequestID> * <RequestType>0002</RequestType> * <User>AC000039</User> * <Password>bc0TYXab4UjcZiOtX9XpdQ</Password> * </Head> * <Body> * …… * </Body> * </Packet> */ public void testCreatXml2() { //创建一个Document对象 Document document = DocumentHelper.createDocument(); //创建一个根节点 Element root = document.addElement("Packet"); //设置根节点属性 root.addAttribute("type", "REQUEST"); root.addAttribute("version", "1.0"); //创建root的子节点head,body Element eleHead = root.addElement("head"); Element eleBody = root.addElement("body"); //处理子节点head,有三个子节点RequestType,User,Password,并添加各个的文本 Element eleRequestType = eleHead.addElement("RequestType"); eleRequestType.addText("AC00003900021456305194844"); Element eleUser = eleHead.addElement("User"); eleUser.addText("AC000039"); Element elePassword = eleHead.addElement("Password"); elePassword.addText("bc0TYXab4UjcZiOtX9XpdQ"); //处理子节点Body,添加子节点hello,文本world Element eleHello = eleBody.addElement("Hello"); eleHello.addText("world"); //指定文档输出编码格式 OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("utf-8"); Writer out; try { //创建一个文档输出流对象,向指定的文件中输入 out = new FileWriter("E://lazyli/test02.xml"); //创建XMLWriter对象 XMLWriter writer = new XMLWriter(out, format); writer.write(document); System.out.println("成功生成xml文件!"); out.close(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Dom4jCreateXml createXml = new Dom4jCreateXml(); // createXml.testCreatXml(); createXml.testCreatXml2(); } }
XML文件的解析
public class ParseXml01 { User user = new User(); //递归遍历xml文档,获取里面的元素 public void parseElement02(Element rootElement) { Element element; //使用迭代器遍历根节点 for (Iterator iterator = rootElement.elementIterator(); iterator.hasNext(); ) { //获取根子节下面的节点 element = (Element) iterator.next(); //打印节点的名字和文本 //System.out.println("当前节点:" + element.getName() + ",文本:" +element.getTextTrim()); //将文件中的用户信息提取出来 if (element.getName().equals("User")) { if (element.getName() != null && element.getName() != "") { user.setName(element.getTextTrim()); } } if (element.getName().equals("Password")) { if (element.getName() != null && element.getName() != "") { user.setPassword(element.getTextTrim()); } } //判断当前节点是否存在子节点,存在的话就继续遍历 //得到节点类型,为1代表有子节点 if (element.getNodeType() == Node.ELEMENT_NODE) { if (element.hasContent()) { parseElement02(element); } } } } //解析 public void parseXmlMethod(File file) throws Exception { //创建SAXReader解析对象 SAXReader reader = new SAXReader(); //根据SAXReader对象创建Document对象 Document document = reader.read(file); //document对象得到根节点 Element eleRoot = document.getRootElement(); //打印root信息 System.out.println("根元素:" + eleRoot.getName() + ",属性:"); //调用递归方法进行解析节点信息 parseElement02(eleRoot); } //打印用户信息 public void userInfo() throws Exception { //调用解析方法,解析文件,输出文件中的用户信息 parseXmlMethod(new File("E://lazyli/test02.xml")); System.out.println("用户名:" + user.getName() + ",密码:" + user.getPassword()); } public static void main(String[] args) throws Exception { ParseXml01 parseXml01 = new ParseXml01(); parseXml01.userInfo(); } }
以上是关于使用Dom4j对XML文档创建与解析的主要内容,如果未能解决你的问题,请参考以下文章
javaweb学习总结十三(dom4j方式对XML文档进行解析)