DOM4J XML解析
来源:互联网 发布:c语言的编程环境 编辑:程序博客网 时间:2024/05/29 11:39
从文件中读取并解析xml
xml文件
module01.xml
<?xml version="1.0" encoding="UTF-8"?> <modules id="123"> 测试 <module> 这个是module标签的文本信息</module> 哈哈哈 </modules>
xml测试
import java.io.File;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Test { public static void main(String[] args) { try{ SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File("D:/module01.xml"));//必须指定文件的绝对路径 //获取根节点对象 Element rootElement = document.getRootElement(); System.out.println("根节点名称:" + rootElement.getName());//获取节点的名称 System.out.println("根节点有多少属性:" + rootElement.attributeCount());//获取节点属性数目 System.out.println("根节点id属性的值:" + rootElement.attributeValue("id"));//获取节点的属性id的值 System.out.println("根节点内文本:" + rootElement.getText());//如果元素有子节点则返回空字符串,否则返回节点内的文本 //rootElement.getText() 之所以会换行是因为 标签与标签之间使用了tab键和换行符布局,这个也算是文本所以显示出来换行的效果。 System.out.println("根节点内文本(1):" + rootElement.getTextTrim());//去掉的是标签与标签之间的tab键和换行符等等,不是内容前后的空格 System.out.println("根节点子节点文本内容:" + rootElement.getStringValue()); //返回当前节点递归所有子节点的文本信息。 //获取子节点 Element element = rootElement.element("module"); if(element != null){ System.out.println("子节点的文本:" + element.getText());//因为子节点和根节点都是Element对象所以它们的操作方式都是相同的 } //但是有些情况xml比较复杂,规范不统一,某个节点不存在直接java.lang.NullPointerException,所以获取到element对象之后要先判断一下是否为空 rootElement.setName("root");//支持修改节点名称 System.out.println("根节点修改之后的名称:" + rootElement.getName()); rootElement.setText("text"); //同样修改标签内的文本也一样 System.out.println("根节点修改之后的文本:" + rootElement.getText()); } catch (Exception e) { e.printStackTrace(); } }}
- 运行结果:
将XML字符串解析为Document
测试代码:
import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;public class Test1 { public static void main(String[] args) { try { Document document = DocumentHelper.parseText("<?xml version=\"1.0\" encoding=\"UTF-8\"?><modules id=\"123\"><module> 这个是module标签的文本信息</module></modules>"); //获取根节点对象 Element rootElement = document.getRootElement(); System.out.println("根节点名称:" + rootElement.getName());//获取节点的名称 System.out.println("根节点有多少属性:" + rootElement.attributeCount());//获取节点属性数目 System.out.println("根节点id属性的值:" + rootElement.attributeValue("id"));//获取节点的属性id的值 System.out.println("根节点内文本:" + rootElement.getText());//如果元素有子节点则返回空字符串,否则返回节点内的文本 //rootElement.getText() 之所以会换行是因为 标签与标签之间使用了tab键和换行符布局,这个也算是文本所以显示出来换行的效果。 System.out.println("根节点内文本(1):" + rootElement.getTextTrim());//去掉的是标签与标签之间的tab键和换行符等等,不是内容前后的空格 System.out.println("根节点子节点文本内容:" + rootElement.getStringValue()); //返回当前节点递归所有子节点的文本信息。 //获取子节点 Element element = rootElement.element("module"); if(element != null){ System.out.println("子节点的文本:" + element.getText());//因为子节点和根节点都是Element对象所以它们的操作方式都是相同的 } //但是有些情况xml比较复杂,规范不统一,某个节点不存在直接java.lang.NullPointerException,所以获取到element对象之后要先判断一下是否为空 rootElement.setName("root");//支持修改节点名称 System.out.println("根节点修改之后的名称:" + rootElement.getName()); rootElement.setText("text"); //同样修改标签内的文本也一样 System.out.println("根节点修改之后的文本:" + rootElement.getText()); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
- 运行结果:
XML解析进阶
简单版
xml文件
<?xml version="1.0" encoding="UTF-8"?> <modules id="123"> <module> <name>oa</name> <value>系统基本配置</value> <descript>对系统的基本配置根目录</descript> </module> </modules>
测试代码
public void test(){ try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File("D:/module02.xml")); Element rootElement = document.getRootElement(); Iterator<Element> modulesIterator = rootElement.elements("module").iterator(); while (modulesIterator.hasNext()) { Element element = (Element) modulesIterator.next(); Element nameElement = element.element("name"); System.out.println(nameElement.getName()+":"+nameElement.getText()); Element valueElement = element.element("value"); System.out.println(valueElement.getName()+":"+valueElement.getText()); Element descriptElement = element.element("descript"); System.out.println(descriptElement.getName()+":"+descriptElement.getText()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }//必须指定文件的绝对路径 }
运行结果
稍微复杂版
xml文件
<?xml version="1.0" encoding="UTF-8"?> <modules id="123"> <module>这个是module标签的文本信息</module> <module id=""> <name>oa</name> <value>系统基本配置</value> <descript>对系统的基本配置根目录</descript> <module>这个是子module标签的文本信息</module> </module> <module> <name>管理配置</name> <value>none</value> <descript>管理配置的说明</descript> <module id="106"> <name>系统管理</name> <value>0</value> <descript>Config</descript> <module id="107"> <name>部门编号</name> <value>20394</value> <descript>编号</descript> </module> </module> </module> </modules>
测试代码
public void test2(){ try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File("D:/module03.xml")); Element rootElement = document.getRootElement(); if (rootElement.elements("module") != null) { List<Element> elements = rootElement.elements("module"); for (Element element : elements) { System.out.println("【1】" + element.getTextTrim()); Element nameElement = element.element("name"); if (nameElement != null) { System.out.println(" 【2】" + nameElement.getName() + ":" + nameElement.getText()); } Element valueElement = element.element("value"); if (valueElement != null) { System.out.println(" 【2】" + valueElement.getName() + ":" + valueElement.getText()); } Element descriptElement = element.element("descript"); if (descriptElement != null) { System.out.println(" 【2】" + descriptElement.getName() + ":" + descriptElement.getText()); } List<Element> subElementList = element.elements("module"); for (Element subElement : subElementList) { System.out.println(" 【2】" + subElement.getTextTrim()); Element subnameElement = subElement.element("name"); if (subnameElement != null) { System.out.println(" 【3】" + subnameElement.getName() + ":" + subnameElement.getText()); } Element subvalueElement = subElement.element("value"); if (subvalueElement != null) { System.out.println(" 【3】" + subvalueElement.getName() + ":" + subvalueElement.getText()); } Element subdescriptElement = subElement.element("descript"); if (subdescriptElement != null) { System.out.println(" 【3】" + subdescriptElement.getName() + ":" + subdescriptElement.getText()); } } } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
运行结果
XML文件生成
测试代码:
public void test3(){ try { Document document = DocumentHelper.createDocument(); //添加节点信息 Element rootElement = document.addElement("modules"); //这里可以继续添加子节点,也可以指定内容 rootElement.setText("这个是module标签的文本信息"); Element element = rootElement.addElement("module"); Element nameElement = element.addElement("name"); Element valueElement = element.addElement("value"); Element descriptionElement = element.addElement("description"); nameElement.setText("名称"); nameElement.addAttribute("language", "java");//为节点添加属性值 valueElement.setText("值"); valueElement.addAttribute("language", "c#"); descriptionElement.setText("描述"); descriptionElement.addAttribute("language", "sql server"); System.out.println(document.asXML()); //将document文档对象直接转换成字符串输出 Writer fileWriter = new FileWriter("d:\\module.xml"); //dom4j提供了专门写入文件的对象XMLWriter XMLWriter xmlWriter = new XMLWriter(fileWriter); xmlWriter.write(document); xmlWriter.flush(); xmlWriter.close(); System.out.println("xml文档添加成功!"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }
- 运行结果,生成文档
module.xml
0 0
- 用DOM4J解析XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 解析xml之--DOM4J
- dom4j解析XML
- 使用 dom4j 解析 XML
- xml文件解析-DOM4J
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- dom4j解析xml方法
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- HDU5546 Ancient Go(深搜DFS)(2015CCPC)
- L2-021. 点赞狂魔
- bzoj4843
- VR系列——Oculus Rift 介绍指南:四、Oculus Rift的硬件设置
- 找出数组中出现次数最多的数字&找出数组中只出现一次的数字
- DOM4J XML解析
- POJ 2411 Mondriaan's Dream 状态压缩
- 为bookStore添加权限【动态代理和注解】
- fl2440 内核移植
- tkinter的variable属性
- 数组拷贝操作 从数组默认下标 到拷到我指定的长度
- 数据库中常用的锁及其应用场景
- (转载/侵删)mvc与三层结构终极区别
- ElasticMaterial.cs