`
longzhun
  • 浏览: 369925 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xml解析(超全)---(三)

    博客分类:
  • XML
XML 
阅读更多

DOM4J
/**
  * doc2XmlFile 将Document对象保存为一个xml文件到本地
  *
  * @return true:保存成功 flase:失败
  * @param filename
  *            保存的文件名
  * @param document
  *            需要保存的document对象
  */
 public static boolean doc2XmlFile(Document document, String filename) {
  boolean flag = true;
  try {
   /* 将document中的内容写入文件中 */
   // 默认为UTF-8格式,指定为"GB2312"
   OutputFormat format = OutputFormat.createPrettyPrint();
   format.setEncoding("GB2312");
   XMLWriter writer = new XMLWriter(
     new FileWriter(new File(filename)), format);
   writer.write(document);
   writer.close();
  } catch (Exception ex) {
   flag = false;
   ex.printStackTrace();
  }
  return flag;
 }

/**
  * string2XmlFile 将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败
  *
  * @return true:保存成功 flase:失败
  * @param filename
  *            保存的文件名
  * @param str
  *            需要保存的字符串
  */
 public static boolean string2XmlFile(String str, String filename) {
  boolean flag = true;
  try {
   Document doc = DocumentHelper.parseText(str);
   flag = doc2XmlFile(doc, filename);
  } catch (Exception ex) {
   flag = false;
   ex.printStackTrace();
  }
  return flag;
 }
/**
  * load 载入一个xml文档
  *
  * @return 成功返回Document对象,失败返回null
  * @param uri
  *            文件路径
  */
 public static Document load(String filename) {
  Document document = null;
  try {
   SAXReader saxReader = new SAXReader();
   document = saxReader.read(new File(filename));
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  return document;
 }
/**
  * xmlWriteDemoByString 演示String保存为xml文件
  */
 public void xmlWriteDemoByString() {
  String s = "";
  /** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写 */
  s = "<config>\r\n" + "    <ftp name='DongDian'>\r\n"
    + "      <ftp-host>127.0.0.1</ftp-host>\r\n"
    + "      <ftp-port>21</ftp-port>\r\n"
    + "      <ftp-user>cxl</ftp-user>\r\n"
    + "      <ftp-pwd>longshine</ftp-pwd>\r\n"
    + "      <!-- ftp最多尝试连接次数 -->\r\n"
    + "      <ftp-try>50</ftp-try>\r\n"
    + "      <!-- ftp尝试连接延迟时间 -->\r\n"
    + "      <ftp-delay>10</ftp-delay>\r\n" + "   </ftp>\r\n"
    + "</config>\r\n";
  // 将文件生成到classes文件夹所在的目录里
  string2XmlFile(s, "d://xmlWriteDemoByString.xml");
  // 将文件生成到classes文件夹里
//  string2XmlFile(s, "classes/xmlWriteDemoByString.xml");
 }
/**
  * 演示手动创建一个Document,并保存为XML文件
  */
 public void xmlWriteDemoByDocument() {
  /** 建立document对象 */
  Document document = DocumentHelper.createDocument();
  /** 建立config根节点 */
  Element configElement = document.addElement("config");
  /** 建立ftp节点 */
  configElement.addComment("东电ftp配置");
  Element ftpElement = configElement.addElement("ftp");
  ftpElement.addAttribute("name", "DongDian");
  /** ftp 属性配置 */
  Element hostElement = ftpElement.addElement("ftp-host");
  hostElement.setText("127.0.0.1");
  (ftpElement.addElement("ftp-port")).setText("21");
  (ftpElement.addElement("ftp-user")).setText("cxl");
  (ftpElement.addElement("ftp-pwd")).setText("longshine");
  ftpElement.addComment("ftp最多尝试连接次数");
  (ftpElement.addElement("ftp-try")).setText("50");
  ftpElement.addComment("ftp尝试连接延迟时间");
  (ftpElement.addElement("ftp-delay")).setText("10");
  /** 保存Document */
  doc2XmlFile(document, "d://xmlWriteDemoByDocument.xml");
 }


/**
  * 演示读取文件的具体某个节点的值
  */
 public static void xmlReadDemo() {
  Document doc = load("d://xmlWriteDemoByDocument.xml");
  // Element root = doc.getRootElement();
  /** 先用xpath查找所有ftp节点 并输出它的name属性值 */
  List list = doc.selectNodes("/config/ftp");
  Iterator it = list.iterator();
  while (it.hasNext()) {
   Element ftpElement = (Element) it.next();
   System.out.println("ftp_name="
     + ftpElement.attribute("name").getValue());
  }
  /** 直接用属性path取得name值 */
  list = doc.selectNodes("/config/ftp/@name");
  it = list.iterator();
  while (it.hasNext()) {
   Attribute attribute = (Attribute) it.next();
   System.out.println("@name=" + attribute.getValue());
  }
  /** 直接取得DongDian ftp的 ftp-host 的值 */
  list = doc.selectNodes("/config/ftp/ftp-host");
  it = list.iterator();
  Element hostElement = (Element) it.next();
  System.out.println("DongDian's ftp_host=" + hostElement.getText());
 }
/**
  * doc2String 将xml文档内容转为String
  *
  * @return 字符串
  * @param document
  */
 public static String doc2String(Document document) {
  String s = "";
  try {
   // 使用输出流来进行转化
   ByteArrayOutputStream out = new ByteArrayOutputStream();
   // 使用GB2312编码
   OutputFormat format = new OutputFormat("   ", true, "UTF-8");
   XMLWriter writer = new XMLWriter(out, format);
   writer.write(document);
   s = out.toString("UTF-8");
  } catch (Exception ex) {
   ex.printStackTrace();
  }
  return s;
 }
 实例一:(读取硬盘存在的xml文件)
 SAXReader read=new SAXReader();
   Document doc=null;
   try {
    doc=read.read(new File("d://student.xml"));
    
    List classes=doc.selectNodes("//class");
    System.out.println("某学校共有"+classes.size()+"个班级");
    
    for(Iterator it=classes.iterator();it.hasNext();){
     Element eleClass=(Element)it.next();
     String id=eleClass.attributeValue("name");
     System.out.println("班级 "+id);
     System.out.println("***********************");
     Iterator it1=eleClass.elementIterator();
     while(it1.hasNext()){
      Element eleStu=(Element)it1.next();
      String name=eleStu.elementText("name");
      String age=eleStu.element("age").getTextTrim();
      System.out.println("姓名:"+name);
      System.out.println("年龄:"+age);
     }
    }
    
   } catch (DocumentException e) {
    e.printStackTrace();
   }
 实例二:(读取xml字符串)
 StringBuffer sb=new StringBuffer("<?xml version=\"1.0\" encoding=\"gb2312\"?>");
   sb.append("<result>");
   sb.append("<class name=\"1\">");
   sb.append("<student id=\"1\">");
   sb.append("<name>龙准</name>");
   sb.append("<age>25</age>");
   sb.append("</student>");
   sb.append("<student id=\"2\">");
   sb.append("<name>龙准2</name>");
   sb.append("<age>23</age>");
   sb.append("</student>");
   sb.append("</class>");
   sb.append("</result>");
   
   try {
    //第一种读取xml字符串的写法
    Document doc=DocumentHelper.parseText(sb.toString());
    //第二种读取xml字符串的写法
//    SAXReader read=new SAXReader();
//    Document doc=read.read(new StringReader(sb.toString()));
    //第三种读取xml字符串的写法
//    SAXReader read=new SAXReader();
//    Document doc=read.read(new ByteArrayInputStream(sb.toString().getBytes()));
    
    List list=doc.selectNodes("//class");
    System.out.println("某学校共有"+list.size()+"个班级");
    for(Iterator it=list.iterator();it.hasNext();){
     Element eleClass=(Element)it.next();
     String id=eleClass.attributeValue("name");
     System.out.println("班级 "+id);
     System.out.println("***********************");
     for(Iterator it1=eleClass.elementIterator();it1.hasNext();){
      Element eleStu=(Element)it1.next();
      String name=eleStu.element("name").getText();
      String age=eleStu.elementText("age");
      System.out.println("姓名:"+name);
      System.out.println("年龄:"+age);

     }
    }
    
   } catch (DocumentException e) {
    e.printStackTrace();
   }
 实例三:(手动创建document并读取)
 Document doc=DocumentHelper.createDocument();
   Element eleResult=doc.addElement("result");
   Element eleClas=eleResult.addElement("class");
   eleClas.addAttribute("name", "1");
   Element elestu=eleClas.addElement("student");
   elestu.addAttribute("id", "1");
   Element eleName=elestu.addElement("name");
   eleName.addText("龙准");
   Element eleAge=elestu.addElement("age");
   eleAge.addText("25");
   
   Element elestu2=eleClas.addElement("student").addAttribute("id", "2");
   elestu2.addElement("name").setText("龙准");
   elestu2.addElement("age").setText("23");
   
   List list=doc.selectNodes("//class");
   System.out.println("某学校共有"+list.size()+"个班级");
   for(Iterator it=list.iterator();it.hasNext();){
    Element eleClass=(Element)it.next();
    String id=eleClass.attributeValue("name");
    System.out.println("班级 "+id);
    System.out.println("***********************");
    for(Iterator it1=eleClass.elementIterator();it1.hasNext();){
     Element eleStu=(Element)it1.next();
     String name=eleStu.element("name").getText();
     String age=eleStu.elementText("age");
     System.out.println("姓名:"+name);
     System.out.println("年龄:"+age);

    }
   }

分享到:
评论

相关推荐

    xml教程------

    XML(eXtensible Markup Language)是一种用于标记数据的语言,它是HTML(超文本标记语言)的一个扩展,旨在传输和存储数据。本教程将深入探讨XML的基本概念、语法、解析方式以及在实际应用中的作用。 XML的设计...

    XML资料大全--基础 语言 笔记课件

    4. XML解析: - DOM(Document Object Model):将整个XML文档加载到内存中,形成一棵节点树,便于遍历和操作。 - SAX(Simple API for XML):事件驱动的解析方式,逐行读取XML,只在需要时处理特定事件,适用于...

    Java中四种XML解析技术

    Java中的XML解析技术是开发过程中不可或缺的一部分,尤其是在处理结构化数据时。XML(eXtensible Markup Language)因其可扩展性和灵活性,常被用于存储和交换数据。在Java中,有四种主要的XML解析技术,它们分别是...

    XML基础教程源码-code

    在提供的"范春梅-XML基础教程源码-code"中,你可以找到关于XML处理的实例代码,可能包括创建、解析、修改XML文档等操作。通过这些源码,你可以更好地理解XML在实际开发中的应用。 总之,XML作为一种数据交换和存储...

    XML---编程宝典

    1. **解析器**:XML解析器读取XML文档并将其转化为内存中的对象模型,如DOM(文档对象模型)或SAX(简单API for XML)。 2. **DOM**:将整个XML文档加载到内存,形成一个树形结构,方便遍历和操作。 3. **SAX**:...

    oracle过程解析XML,支持超4000

    oracle过程解析XML,支持超4000,并很方便的 . 出结果 oracle过程解析XML,支持超4000 oracle过程解析XML,支持超4000

    iPhone IOS XML解析源代码

    本资源"iPhone iOS XML解析源代码"提供了一个深入学习和比较XML解析技术的实例,包含两种不同的解析方法,旨在帮助开发者了解它们的性能差异。 首先,我们来探讨第一种解析方式:NSXMLParser。这是Apple提供的内置...

    在线解析HTTP XML文件

    HTTP XML文件解析是网络通信中常见的一种技术,它结合了HTTP协议和XML(可扩展标记语言)的数据格式,广泛应用于Web服务、API交互以及数据交换等领域。本文将深入探讨在线解析HTTP XML文件的相关知识点,包括HTTP...

    XML解析 XML操作

    在实际应用中,根据需求和性能考虑,可以选择合适的XML解析库和方法。例如,如果需要频繁修改XML文档,DOM可能更适合;如果处理大型XML文件,SAX或StAX会是更好的选择。结合这些库,可以高效地进行XML的读写、查询和...

    C++实现http的post发送接收数据以及xml解析

    在IT行业中,网络通信是至关重要的部分,而HTTP...理解HTTP协议的工作原理,掌握WinInet的API用法,以及熟悉XML解析库的使用,对于开发涉及网络通信的C++应用程序至关重要。通过实践,你可以更好地理解和掌握这些技能。

    pugixml, 带有XPath支持的C++的轻量级简单和快速XML解析器.zip

    pugixml, 带有XPath支持的C++的轻量级简单和快速XML解析器 pugixml pugixml是一个 C++ XML处理库,由具有丰富遍历/修改功能的DOM和基于XML的超快速XML解析器组成,用于构造XML树和复杂的数据驱动树查询的XPath 1.0...

    XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细

    XML 解析器原理及性能比较 XML 解析器是指将 XML 文档转换为计算机可以理解的格式的软件组件。常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和...

    xml-5-lucky-draw.rar_lucky

    2. **数据解析**:HTML5页面通过JavaScript来解析XML文件,将数据加载到内存中,并显示在界面上。DOM(Document Object Model)API是用于处理XML和HTML文档的标准接口,可用于遍历和操作XML节点。 3. **用户界面**...

    javascript经典特效---XML超酷页面效果一.rar

    2. **解析XML**:获取到XML响应后,我们可以使用DOM方法如getElementsByTagName、getElementById、getAttribute等来查找和提取XML节点信息。例如,获取所有`&lt;effect&gt;`标签: ```javascript var effects = xmlDoc....

    全国省市地超全XML文件

    可以使用XML解析库,如Python的`xml.etree.ElementTree`,Java的`javax.xml.parsers.DocumentBuilderFactory`,或者JavaScript的`DOMParser`。这些库提供了解析XML文档,查找特定元素,以及提取和修改数据的功能。 ...

    XML实用大全(绝对经典)

    - XML解析器负责解析XML文档,确保其符合XML标准。 - **1.3.3 浏览器和其他工具** - 大多数现代浏览器支持XML,并能直接显示或通过样式表呈现XML文档。 - **1.3.4 处理过程总结** - XML文档的处理通常涉及创建、...

    CSS、DHTML、XMLDOM、T-SQL、XPath、正则表达式等.chm文件帮助文档

    这篇文档将围绕着标题中提到的六个关键技术领域——CSS(层叠样式表)、DHTML(动态超文本标记语言)、XMLDOM(XML文档对象模型)、T-SQL(Transact-SQL)、XPath(XML路径语言)以及正则表达式,展开详细的阐述。...

    无废话XML---劳虎

    7. **解析与验证**:XML文档可以被解析器读取,解析器可以是DOM(文档对象模型)、SAX(简单API for XML)或StAX(流式API for XML)。验证器则检查文档是否符合其DTD或Schema。 8. **XPath与XSLT**:XPath是查询...

    C++实现http的post发送接收数据以及xml解

    - **解析准备**: 在C++中,可以使用第三方库如TinyXML、pugixml或Xerces-C++进行XML解析。这里假设我们使用TinyXML,首先需要包含库文件并创建一个`TiXmlDocument`对象。 - **加载XML数据**: 使用`...

Global site tag (gtag.js) - Google Analytics