Dom4j完整教程~XML文档简单操作

读取XML文档:

读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。

public static Document load(String filename) {  Document document = null;  try {  SAXReader saxReader = new SAXReader();  document = saxReader.read(new File(filename)); // 读取XML文件,获得document对象  } catch (Exception ex) {  ex.printStackTrace();  }  return document;  
}  public static Document load(URL url) {  Document document = null;  try {  SAXReader saxReader = new SAXReader();  document = saxReader.read(url); // 读取XML文件,获得document对象  } catch (Exception ex) {  ex.printStackTrace();  }  return document;  
}  

//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Dom运算。执照XML文件头所定义的编码来转换。

获取根节点

根节点是xml分析的开始,任何xml分析工作都需要从根开始

Xml xml = new Xml();  Document dom = xml.load(path + "/" + file);  Element root = dom.getRootElement();  

新增一个节点以及其下的子节点与数据

Element menuElement = root.addElement("menu");  Element engNameElement = menuElement.addElement("engName");  engNameElement.setText(catNameEn);  Element chiNameElement = menuElement.addElement("chiName");  chiNameElement.setText(catName);  

写入XML文件

注意文件操作的包装类是乱码的根源

public static boolean doc2XmlFile(Document document, String filename) {  boolean flag = true;  try {  XMLWriter writer = new XMLWriter(new OutputStreamWriter(  new FileOutputStream(filename), "UTF-8"));  writer.write(document);  writer.close();  } catch (Exception ex) {  flag = false;  ex.printStackTrace();  }  System.out.println(flag);  return flag;  
}  

Dom4j通过XMLWriter将Document对象表示的XML树写入指定的文件,并使用OutputFormat格式对象指定写入的风格和编码方法。调用OutputFormat.createPrettyPrint()方法可以获得一个默认的pretty print风格的格式对象。对OutputFormat对象调用setEncoding()方法可以指定XML文件的编码方法。

public void writeTo(OutputStream out, String encoding)  throws UnsupportedEncodingException, IOException {  OutputFormat format = OutputFormat.createPrettyPrint();  format.setEncoding("gb2312");  XMLWriter writer = new XMLWriter(System.out, format);  writer.write(doc);  writer.flush();  return;  }  

遍历xml节点

       对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。

public boolean isOnly(String catNameEn, HttpServletRequest request,  String xml) {  boolean flag = true;  String path = request.getRealPath("");  Document doc = load(path + "/" + xml);  Element root = doc.getRootElement();  for (Iterator i = root.elementIterator(); i.hasNext();) {  Element el = (Element) i.next();  if (catNameEn.equals(el.elementTextTrim("engName"))) {  flag = false;  break;  }  }  return flag;  
}  

创建xml文件

public static void main(String args[]) {  String fileName = "c:/text.xml";  Document document = DocumentHelper.createDocument();// 建立document对象,用来操作xml文件  Element booksElement = document.addElement("books");// 建立根节点  booksElement.addComment("This is a test for dom4j ");// 加入一行注释  Element bookElement = booksElement.addElement("book");// 添加一个book节点  bookElement.addAttribute("show", "yes");// 添加属性内容  Element titleElement = bookElement.addElement("title");// 添加文本节点  titleElement.setText("ajax in action");// 添加文本内容  try {  XMLWriter writer = new XMLWriter(new FileWriter(new File(fileName)));  writer.write(document) //写入writer.close();  } catch (Exception e) {  e.printStackTrace();  }  }  

修改节点属性

public static void modifyXMLFile() {  String oldStr = "c:/text.xml";  String newStr = "c:/text1.xml";  Document document = null;  //修改节点的属性  try {  SAXReader saxReader = new SAXReader(); // 用来读取xml文档  document = saxReader.read(new File(oldStr)); // 读取xml文档  List list = document.selectNodes("/books/book/@show");// 用xpath查找节点book的属性  Iterator iter = list.iterator();  while (iter.hasNext()) {  Attribute attribute = (Attribute) iter.next();  if (attribute.getValue().equals("yes"))   attribute.setValue("no");  }  } catch (Exception e) {  e.printStackTrace();  }  //修改节点的内容  try {  SAXReader saxReader = new SAXReader(); // 用来读取xml文档  document = saxReader.read(new File(oldStr)); // 读取xml文档  List list = document.selectNodes("/books/book/title");// 用xpath查找节点book的内容  Iterator iter = list.iterator();  while (iter.hasNext()) {  Element element = (Element) iter.next();  element.setText("xxx");// 设置相应的内容  }  } catch (Exception e) {  e.printStackTrace();  }  try {  XMLWriter writer = new XMLWriter(new FileWriter(new File(newStr)));  writer.write(document);  writer.close();  } catch (Exception ex) {  ex.printStackTrace();  }  }  

删除节点

public static void removeNode() {  String oldStr = "c:/text.xml";  String newStr = "c:/text1.xml";  Document document = null;  try {  SAXReader saxReader = new SAXReader();// 用来读取xml文档  document = saxReader.read(new File(oldStr));// 读取xml文档  List list = document.selectNodes("/books/book");// 用xpath查找对象  Iterator iter = list.iterator();  while (iter.hasNext()) {  Element bookElement = (Element) iter.next();  // 创建迭代器,用来查找要删除的节点,迭代器相当于指针,指向book下所有的title节点  Iterator iterator = bookElement.elementIterator("title");  while (iterator.hasNext()) {  Element titleElement = (Element) iterator.next();  if (titleElement.getText().equals("ajax in action")) {  bookElement.remove(titleElement);  }  }  }  } catch (Exception e) {  e.printStackTrace();  }  try {  XMLWriter writer = new XMLWriter(new FileWriter(new File(newStr)));  writer.write(document);  writer.close();  } catch (Exception ex) {  ex.printStackTrace();  }  }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yann LeCun:距离“真正的” AI,我们还缺什么?

来源: AI科技大本营(ID;rgznai100)GMIC Beijing 2018 大会第一天,首个演讲者是 Facebook 首席 AI 科学家 Yann LeCun。他讲述了关于深度学习的最新研究成果,同时也描述了深度学习的未来,以及机…

Python 使用 smtp ssl 模式 发送邮件与附件

参考 : 发送邮件简单入门 ( 以qq邮箱,163邮箱为例 ) :https://blog.csdn.net/qq_38661599/article/details/81013834 smtp ssl 模式 发送邮件 与 附件:https://www.cnblogs.com/SunshineKimi/p/10629342.html Python…

Unity.Interception System (2.0)

转载于:https://www.cnblogs.com/artech/archive/2010/08/27/1810010.html

PyQt5 快速开发 与 实战

From:https://blog.csdn.net/jia666666/category_9278208.html PyQt5 信号 与 槽 信号与槽的入门应用(一):https://blog.csdn.net/jia666666/article/details/81774175 信号与槽的再细分(二):ht…

Flex 流式布局 之 滚动条篇

Flex 流式布局 之 滚动条篇 flex 框架支持流式布局,什么是流式布局呢,就是在运行时对象的大小是未知的,它可能需要由他的内容(childs)或由它的容器来决定它的实际大小。flex 中有两种流式一种就是 百分比形式的(percentWidth),还…

卷积神经网络为什么能称霸计算机视觉领域?

来源:图灵人工智能摘要:在机器视觉和其他很多问题上,卷积神经网络取得了当前最好的效果,它的成功促使我们思考一个问题,卷积神经网络为什么会这么有效?在本文中,将为大家分析卷积神经网络背后的…

Dom4j完整教程~Document对象相关

读取XML文件,获得document对象. SAXReader reader new SAXReader(); Document document reader.read(new File("input.xml")); 解析XML形式的文本,得到document对象. String text "<members></members>"; Document document Doc…

Python3.2+ 的 concurrent.futures 模块

concurrent.futures 官方文档&#xff1a;https://docs.python.org/3/library/concurrent.futures.html concurrent.futures: 线程池, 并发的处理任务&#xff1a;https://www.h3399.cn/201906/703751.html IO 密集型 vs 计算密集型&#xff1a; IO密集型&#xff1a;读取文件…

C# 判断一字符串是否为合法数字(正则表达式)

代码 ///<summary>///判断一个字符串是否为合法整数(不限制长度) ///</summary>///<param name"s">字符串</param>///<returns></returns>publicstaticboolIsInteger(strings) { stringpattern "…

关于现在人工智能预测的一些冷水

来源&#xff1a;人工智能和大数据 作者&#xff1a;田渊栋最近有关人工智能和深度学习的各种预测满天飞&#xff0c;作为圈内人&#xff0c;我来泼点冷水。我们常说科技树科技树&#xff0c;这个比喻是非常贴切的&#xff0c;现代科技的基础理论并不复杂&#xff0c;做个摘要…

Dom4j完整教程~节点相关

获取文档的根节点. Element rootElm document.getRootElement(); 取得某节点的单个子节点. Element memberElmroot.element("member");// "member"是节点名 取得节点的文字 String textmemberElm.getText(); String textroot.elementTe…

Windows10 下搭建汇编语言开发环境( 利用 DOSBOX 和 MASM32 )

Windows10下搭建汇编语言开发环境&#xff08;利用DOSBOX和MASM32&#xff09;&#xff1a;https://www.cnblogs.com/zyever/p/7919007.html 如何在win10 64位下搭载汇编环境&#xff08;包含汇编dosbox和masm文件&#xff09;&#xff1a;https://blog.csdn.net/xyisv/articl…

一文解读“边缘计算” 和物联网的亲密关系!

来源&#xff1a;IT技术之家摘要&#xff1a;物联网的最终目标是万物互联&#xff0c;而边缘计算是解决当前云计算所面对的数据传输问题所应用的主要方式&#xff0c;相对于云计算&#xff0c;有更大的优势。物联网的最终目标是万物互联&#xff0c;而当前对于宽带水平来说&…

动态生成lookup字段

var i: Integer;begin //ADOQuery已打开 //在数据集打开的情况下新增加一个字段 with Self.ADOQuery1 do begin TDataSetDesigner.Create(Self.ADOQuery1); try Designer.BeginDesign; //Keep Old Field //保留旧的字段 Designer.DataSet.Fiel…

Dom4j完整教程~CDATA详解

所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段&#xff08;CDATA section&#xff09;中的文本会被解析器忽略。 PCDATA PCDATA 指的是被解析的字符数据&#xff08;Parsed Character Data&#xff09;。 XML 解析器通常会解析 XML 文档中所有的文本。 当某个…

寄存器 和 存储器

From&#xff1a;https://blog.csdn.net/menshu1892/article/details/79912090 一、计算机硬件 先说内核&#xff1a;内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件&#xff0c;这种访问是有限的&#xff0c;并且内核决定一个程序在什…

博文视点大讲堂36期——让Oracle跑得更快 成功举办

博文视点大讲堂36期——让Oracle跑得更快 成功举办 电子工业出版社博文视点公司于2010年9月日在西单图书大厦成功举办“博文视点大讲堂36期——让Oracle跑得更快”讲座。8月22日&#xff0c;博文视点大讲堂为配合《让Oracle跑得更快—Oracle 10g性能分析与优化思路》的全国热销…

NLP 解决方案是如何被深度学习改写的?

作者&#xff1a;杨晓凡摘要&#xff1a;英特尔人工智能产品事业部&#xff0c;数据科学主任 Yinyin Liu 近日撰写了一篇文章&#xff0c;介绍了深度学习为自然语言处理带来的种种变化。有趣的大趋势是首先产生在 CV 领域的技术也不断用于 NLP&#xff0c;而深度学习解决方案的…

CompletableFuture详解~思维导图

#原图 System.out.println("https://www.processon.com/view/621a1b361e08533fc3afaa44?fromnew1");

如何在SharePoint 2010项目中引用UserProfiles.dll

如果需要进行SharePoint的UserProfile开发的话&#xff0c;我们需要引用以下程序集&#xff1a; C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.Office.Server.UserProfiles.dll在添加引用的时候&#xff0c;Visual Studio 2010会…