package xml;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class TestXML ...{
    //创建XML文档
    public static Document createDocument() ...{
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );

        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );
               
        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );

        return document;
    }
    //将文档内容输出到文件或控制台
    public static void write(Document document) throws IOException ...{

        // lets write to a file
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();


        // Pretty print the document to System.out
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );

        // Compact format to System.out
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }
    //解析XML文件成Document ,url为文件路径
    public  static Document parse(String url) throws DocumentException ...{
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
    //read Docment内容
    public static  void read(Document document) throws DocumentException ...{

        Element root = document.getRootElement();

        // 从XML的根结点开始遍历
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) ...{
            Element element = (Element) i.next();
                System.out.println(element.getName()+":"+element.getText());
        }

      /**//*  // iterate through child elements of root with element name "foo"
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
            Element foo = (Element) i.next();
            // do something
        }

        // iterate through attributes of root 
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
            Attribute attribute = (Attribute) i.next();
            // do something
        }*/
     }
    
    //将document转化为String
    public static String XmlToString(Document document)...{
        return  document.asXML();    
    }
    
    //将document转化为String
    public static Document StringToDocument(String text)...{
        try ...{
            return DocumentHelper.parseText(text);
        } catch (DocumentException e) ...{
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }    
    }
    public static void main(String[] args) throws IOException, DocumentException ...{
//        write(parse("E:/WebService/XFire/example/XFire/output.xml"));
        String str="<?xml version='1.0' encoding='utf-16'?> "+
  "<CurrentWeather>"+
  "<Location>Shanghai / Hongqiao, China (ZSSS) 31-10N 121-26E 3M</Location>"+
  "<Time>Aug 22, 2007 - 09:00 PM EDT / 2007.08.23 0100 UTC</Time>"+
  "<Wind> from the ESE (110 degrees) at 7 MPH (6 KT) (direction variable):0</Wind>"+
  "<Visibility> 4 mile(s):0</Visibility>"+
  "<SkyConditions> mostly clear</SkyConditions>"+
  "<Temperature> 87 F (31 C)</Temperature>"+
  "<DewPoint> 78 F (26 C)</DewPoint>"+
  "<RelativeHumidity> 74%</RelativeHumidity>"+
  "<Pressure> 29.77 in. Hg (1008 hPa)</Pressure>"+
  "<Status>Success</Status>"+
  "</CurrentWeather>";
        write(StringToDocument(str));
    }
}

SAX解析xml

1、使用绝对路径

// 解析XML文件成Document ,url为文件路径
   SAXReader reader = new SAXReader();
   Document document = null;
  
      String xmlFilePath = "d:/serialComm.xml";

document = reader.read(xmlFilePath);
    InitSMSCat.log.info("串口配置文件的目录:"+xmlFilePath);
  
   if(document == null)
   {
    InitSMSCat.log.info("配置文件serialComm.xml读取发生错误!!!");
    throw new Exception("配置文件serialComm.xml读取发生错误!!!");
   
   }
   // read Docment内容
   Element root = document.getRootElement();

// 从XML的根结点开始遍历
   for (Iterator i = root.elementIterator(); i.hasNext();)
   {
    Element element = (Element) i.next();
    if(element.getName().equals("comm")) comm = element.getText();
   }

2、使用环境变量

// 解析XML文件成Document ,url为文件路径
   SAXReader reader = new SAXReader();
   Document document = null;
  
   InitSMSCat.log.info("环境变量SMS_HOME = "+System.getenv("SMS_HOME"));
  
      String xmlFilePath = "";
    if(Utility.getOsName().equals("windows"))
     xmlFilePath = System.getenv("SMS_HOME")+"";
    if(Utility.getOsName().equals("linux"))
     xmlFilePath = (System.getenv("SMS_HOME")+"/config/serialComm.xml").replace("\\", "/");
   
   document = reader.read(xmlFilePath);
    InitSMSCat.log.info("串口配置文件的目录:"+xmlFilePath);
  
   if(document == null)
   {
    InitSMSCat.log.info("配置文件serialComm.xml读取发生错误!!!");
    throw new Exception("配置文件serialComm.xml读取发生错误!!!");
   
   }
   // read Docment内容
   Element root = document.getRootElement();

// 从XML的根结点开始遍历
   for (Iterator i = root.elementIterator(); i.hasNext();)
   {
    Element element = (Element) i.next();
    if(element.getName().equals("comm")) comm = element.getText();
   }

3、读取jar包中的xml文件

// 解析XML文件成Document ,url为文件路径
   SAXReader reader = new SAXReader();
   Document document = null;

document = reader.read(this.getClass().getResourceAsStream("/serialComm.xml"));
   if(document == null)
   {
    InitSMSCat.log.info("配置文件serialComm.xml读取发生错误!!!");
    throw new Exception("配置文件serialComm.xml读取发生错误!!!");
   
   }
   // read Docment内容
   Element root = document.getRootElement();

// 从XML的根结点开始遍历
   for (Iterator i = root.elementIterator(); i.hasNext();)
   {
    Element element = (Element) i.next();
    if(element.getName().equals("comm")) comm = element.getText();
   }

dom4j的用法的更多相关文章

  1. 使用面向对象对XML进行解析:dom和dom4j的用法

    这是一个比较简单的例子,主要是运用面向对象的思想,对XML文件进行解析,用dom和dom4j方法 <?xml version="1.0" encoding="utf ...

  2. Java Dom4j XML用法总结

    1.新建XML文档:              Document doc = DocumentHelper.createDocument();             Element root = d ...

  3. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  4. dom4J 学习

    Java给我们提供了标准的W3C接口实现,已完成对XML的处理.主要有两大类,分别是DOM操作,SAX解析.DOM可以将XML加载到内存中,对XML进行方便的增删查改.由于是将整个XML都加载到内存中 ...

  5. 08-Xml & Tomcat

    Xml & Tomcat Xml >eXtendsible   markup  language     可扩展的标记语言 XML  有什么用? 1. 可以用来保存数据 2. 可以用来做 ...

  6. Xml & Tomcat

    文档声明: 简单声明, version : 解析这个xml的时候,使用什么版本的解析器解析 <?xml version="1.0" ?> encoding : 解析xm ...

  7. Java就业班day09_xml&tomcat

    Xml & Tomcat Xml eXtendsible markup language 可扩展的标记语言 XML 有什么用? 可以用来保存数据 可以用来做配置文件 数据传输载体 定义xml ...

  8. 第70节:Java中xml和tomcat

    第70节:Java中xml和tomcat 前言: 哭着也要看完,字数: jdbc crud - statement dao java.sql.Driver The interface that eve ...

  9. 中阶 d04.1 xml解析

    ##XML 解析 > 其实就是获取元素里面的字符数据或者属性数据. ###XML解析方式(面试常问) > 有很多种,但是常用的有两种. * DOM * SAX ![icon](img/pa ...

随机推荐

  1. WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构

    原文:WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 细算起来,已经有好几个月没有真正的写过文章了.近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析>的写作,一直 ...

  2. 关于PEER - PEER毅恒挚友 - Powered by Discuz!

    关于PEER - PEER毅恒挚友 - Powered by Discuz! PEER Experience Exchange Rostrum(PEER)由海外中国留学生和中国知名高校学生组成,服务中 ...

  3. 怎样从 Google Play 下载 Android 程序到电脑上

    想必非常多朋友也有须要通过电脑下载Google Play的apk到电脑端的时候,事实上非常easy,推荐一个站点:APK Downloader APK Downloader 是一个能直接从网页下载Go ...

  4. javascript定义类和类的实现

    首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: /***定义类***/ var Class = fun ...

  5. try catch finally的执行顺序到底是怎样的?

    首先执行try,如果有异常执行catch,无论如何都会执行finally 一个函数中肯定会执行finally中的部分. 关于一个函数的执行过程是,当有return以后,函数就会把这个数据存储在某个位置 ...

  6. for循环遍历字符串的还有一种方法

    遍历字符c,让它各自等于字符串数组chars里面的各个字符.然后运行以下的语句,当c被赋值为chars里面全部字符各一次后.就会退出这个循环. 通常我们遍历字符串数组用 for(int i=0;i&l ...

  7. Swift - 系统声音服务的使用(播放声音,提醒,震动)

    1,系统声音服务介绍: 系统声音服务提供了一个Api,用于播放不超过30秒的声音.它支持的文件格式有限,具体的说只有CAF.AIF和使用PCM或IMA/ADPCM数据的WAV文件. 但此函数没有提供操 ...

  8. MSSQL - 自增1的标识列一次增长了1000

    @情若天_RunUp: 1. Open "SQL Server Configuration Manager"2. Click "SQL Server Services&q ...

  9. greatis很不错,出售源代码

    http://www.greatis.com/delphicb/ 特别是: http://www.greatis.com/delphicb/imgedit/

  10. mfc控件与其对应的对象的关联方法

    对话框的控件与其对应类的对象相关联:(两种方法) (1)      通过CWnd::DoDataExchange函数进行关联: 用VC++6.0的MFC ClassWizard中的Member Var ...