学习:dom4j和xpath

上传人:第*** 文档编号:30979772 上传时间:2018-02-03 格式:DOCX 页数:19 大小:59.46KB
返回 下载 相关 举报
学习:dom4j和xpath_第1页
第1页 / 共19页
学习:dom4j和xpath_第2页
第2页 / 共19页
学习:dom4j和xpath_第3页
第3页 / 共19页
学习:dom4j和xpath_第4页
第4页 / 共19页
学习:dom4j和xpath_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《学习:dom4j和xpath》由会员分享,可在线阅读,更多相关《学习:dom4j和xpath(19页珍藏版)》请在金锄头文库上搜索。

1、1、DOM4J 简介DOM4J 是 dom4j.org 出品的一个开源 XML 解析包。DOM4J 应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。Dom:把整个文档作为一个对象。DOM4J 最大的特色是使用大量的接口。它的主要接口都在 org.dom4j 里面定义:魂牵梦萦魂牵梦萦魂牵梦萦Attribute 定义了 XML 的属性。Branch 指能够包含子节点的节点。如 XML 元素(Element) 和文档(Docuemnts)定义了一个公共的行为CDATA 定义了

2、 XML CDATA 区域CharacterData 是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.Comment 定义了 XML 注释的行为Document 定义了 XML 文档DocumentType 定义 XML DOCTYPE 声明Element 定义 XML 元素ElementHandler 定义了 Element 对象的处理器ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息Entity 定义 XML entityNode 为 dom4j 中所有的 XML 节点定义了多态行为NodeFilter 定义了

3、在 dom4j 节点中产生的一个滤镜或谓词的行为(predicate)ProcessingInstruction 定义 XML 处理指令Text 定义 XML 文本节点Visitor 用于实现 Visitor 模式XPath 在分析一个字符串后会提供一个 XPath 表达式接口之间的继承关系如下:interface java.lang.Cloneableinterface org.dom4j.Nodeinterface org.dom4j.Attributeinterface org.dom4j.Branchinterface org.dom4j.Documentinterface org.d

4、om4j.Elementinterface org.dom4j.CharacterDatainterface org.dom4j.CDATAinterface org.dom4j.Commentinterface org.dom4j.Textinterface org.dom4j.DocumentTypeinterface org.dom4j.Entityinterface org.dom4j.ProcessingInstruction2、XML 文档操作 12.1、读取 XML 文档:读写 XML 文档主要依赖于 org.dom4j.io 包,有 DOMReader 和 SAXReader

5、两种方式。因为利用了相同的接口,它们的调用方式是一样的。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(

6、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 文件头所定义的编码来转换。2.2、获取根节点根节点是 xml 分析的开始,任何

7、xml 分析工作都需要从根开始Xml xml = new Xml();Document dom = xml.load(path + / + file);Element root = dom.getRootElement();2.3、. 新增一个节点以及其下的子节点与数据Element menuElement = root.addElement(menu);Element engNameElement = menuElement.addElement(engName);engNameElement.setText(catNameEn);Element chiNameElement = menuE

8、lement.addElement(chiName);chiNameElement.setText(catName);2.4、 写入 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)

9、;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()方法可以指定

10、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;2. 5、遍历 x

11、ml 节点对 Document 对象调用 getRootElement()方法可以返回代表根节点的 Element 对象。拥有了一个 Element 对象后,可以对该对象调用 elementIterator()方法获得它的子节点的 Element 对象们的一个迭代器。使用(Element)iterator.next()方法遍历一个 iterator 并把每个取出的元素转化为 Element 类型。public boolean isOnly(String catNameEn,HttpServletRequest request,String xml) boolean flag = true;St

12、ring 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;2.6、创建 xml 文件public static void

13、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 节点boo

14、kElement.addAttribute(show,yes);/添加属性内容Element titleElement=bookElement.addElement(title);/添加文本节点titleElement.setText(ajax in action);/添加文本内容tryXMLWriter writer=new XMLWriter(new FileWriter(new File(fileName);writer.write(document);writer.close();catch(Exception e)e.printStackTrace();2.7、修改节点属性publi

15、c 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 查找节点 boo

16、k 的属性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 = docu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号