学习:Dom4j 
1DOM4J简介
    DOM4J 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOMSAX JAXP
    DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。
    Dom:把整个文档作为一个对象。
  DOM4J 最大的特是使用大量的接口。它的主要接口都在org.dom4j里面定义:
Attribute
定义了 XML 的属性。
Branch
指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA
定义了 XML CDATA 区域
CharacterData
是一个标识接口,标识基于字符的节点。如CDATAComment, Text.
Comment
定义了 XML 注释的行为
Document
定义了XML 文档
DocumentType
定义 XML DOCTYPE 声明
Element
定义XML 元素
ElementHandler
定义了Element 对象的处理器
ElementPath
ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity
定义 XML entity
Node
dom4j中所有的XML节点定义了多态行为
NodeFilter
定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate
ProcessingInstruction
定义 XML 处理指令
Text
定义 XML 文本节点
Visitor
用于实现 Visitor模式
XPath
在分析一个字符串后会提供一个 XPath 表达式
接口之间的继承关系如下:
interface java.lang.Cloneable
    interface org.dom4j.Node
          interface org.dom4j.Attribute
          interface org.dom4j.Branch
                  interface org.dom4j.Document
                  interface org.dom4j.Element
          interface org.dom4j.CharacterData
                  interface org.dom4j.CDATA
                  interface org.dom4j.Comment
                  interface org.dom4j.Text
          interface org.dom4j.DocumentType
          interface org.dom4j.Entity
          interface org.dom4j.ProcessingInstruction
2XML文档操作1
2.1、读取XML文档:
    读写XML文档主要依赖于org.dom4j.io包,有DOMReaderSAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。
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文件头所定义的编码来转换。
2.2、获取根节点
根节点是xml分析的开始,任何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 = menuElement.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);
writer.close();
} catch (Exception ex) {
flag = false;
ex.printStackTrace();
}
System.out.println(flag);
return flag;
}
 
    Dom4j通过XMLWriterDocument对象表示的XML写入指定的文件,并使用OutputFormat格式对象指定写入的风格和编码方法。调用atePrettyPrint()方法可以获得一个默认的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;
}使用dom4j解析xml文件
2. 5、遍历xml节点
      Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(()方法遍历一个iterator并把每个取出的元素转化为Element类型。
public boolean isOnly(String catNameEn,HttpServletRequest request,String xml) {
boolean flag = true;
String path = RealPath("");
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 main(String args[]){
String fileName="c:/l";
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");//添加文本节点

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。