jdom解析xml文档

转载 2007年09月12日 16:17:00

一.简介
  
  JDOM是基于Java2的API,它用Java的数据类型来定义操作数据树的各个节点...呵,就是这样,还是看怎么用它来解析XML文档吧^_^

二.API

  JDOM的API还是很简单的,数量也不多,通过看方法的名字就能知道他们的作用。在这里就不罗列了,需要完整最新的API参考,可以到http://www.jdom.org网站查看。


三.解析实例

  JDOM提供了很多操作节点非常方便有效的方法,因此能很轻松的读取,修改XML文档。下面这个例子是修改bigmouse的CAD成绩,然后添加一条新学生资料。

---------- MyJDOM.java ----------

import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import java.util.*;
import java.io.*;

public class MyJDOM
{

  public MyJDOM()
  {
  }

  public static void main(String[] args)
  {
    if (args.length != 1)
    {
      System.out.println("Usage:java MyJDOM [XML file URI]");
    }

    MyJDOM myJDOM = new MyJDOM();
    myJDOM.parserXMLFile(args[0]);
  }

  /**
   * 解析文档
   * @param fileURI
   */
  private void parserXMLFile(String fileURI)
  {
    try
    {
      //获得org.jdom.input.SAXBuilder的一个实例,用来获得XML文档。
      //参数false表示不进行验证。
      //参数中没有指定使用什么解析器,因此使用默认的解析器。
      SAXBuilder builder = new SAXBuilder(false);
      //得到Document
      Document doc = builder.build(fileURI);
      //名字空间
      Namespace ns = Namespace.getNamespace("LIT", "http://www.lit.edu.cn/student/");
      //得到根节点LIT:StuInfo
      Element elmtStuInfo = doc.getRootElement();
      //取得所有LIT:student节点的集合
      List lstStudents = elmtStuInfo.getChildren("student", ns);
      //修改bigmouse的CAD分数
      for (int i = 0; i < lstStudents.size(); i++)
      {
        //当前学生节点
        Element elmtStudent = (Element)lstStudents.get(i);

        if (elmtStudent.getChildTextTrim("name", ns).equals("bigmouse"))
        {

//所有课程节点的集合
          List lstLesson = elmtStudent.getChildren("lesson", ns);

          for (int j = 0; j < lstLesson.size(); j++)
          {
            Element elmtLesson = (Element)lstLesson.get(j);

            if (elmtLesson.getChildTextTrim("lessonName", ns).equals("autoCAD"))
            {
              //修改CAD分数,100分 @_@
              elmtLesson.getChild("lessonScore", ns).setText("100");
              System.out.println("** autoCAD:100");
            }
          }
        }//end if
      }//end for

      //添加一条学生记录
      elmtStuInfo.addContent(new Element("student", ns).addContent(new Element("name", ns).setText("fannWong")) .addContent(new Element("sex", ns).setText("female"))
                            .addContent(new Element("lesson", ns).addContent(new Element("lessonName", ns).setText("math")) .addContent(new Element("lessonScore", ns).setText("85"))) 

  .addContent(new Element("lesson", ns).addContent(new Element("lessonName", ns).setText("English"))
                                                                                          .addContent(new Element("lessonScore", ns).setText("95"))))
                .addContent(new Element("breakLine", ns));

      System.out.println("** New Element added!");

      //调整一下格式,把实体引用放到最后面
      //先删除,后追加。
      elmtStuInfo.removeChild("master", ns);
      elmtStuInfo.addContent(new Element("master", ns).addContent(new Entity("masterName")));

      //输出文档
      //第一个参数是缩进字符串,这里是4个空格。
      //第二个参数是true,表示需要换行。
      XMLOutputter printDoc = new XMLOutputter("    ", true);
      printDoc.output(doc, new FileOutputStream("StuInfo.xml"));
    }
    catch (JDOMException jdome)
    {
      System.out.println(jdome.getMessage());
    }
    catch (FileNotFoundException fnfe)
    {
      System.out.println(fnfe.getMessage());
    }
    catch (IOException ioe)
    {
      System.out.println(ioe.getMessage());
    }
  }
}
=================================================================================

---------- 改变后的 StuInfo.dtd ----------

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE LIT:StuInfo SYSTEM "dtd/student.dtd">
<?xml-stylesheet href="xsl/StuInfo.xsl" type="text/xsl"?>
<LIT:StuInfo xmlns:LIT="http://www.lit.edu.cn/student/">
    <LIT:student>

<LIT:name>bigmouse</LIT:name>
        <LIT:sex>male</LIT:sex>
        <LIT:lesson>
            <LIT:lessonName>math</LIT:lessonName>
            <LIT:lessonScore>60</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>Englist</LIT:lessonName>
            <LIT:lessonScore>59</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>autoCAD</LIT:lessonName>
            <LIT:lessonScore>100</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>SCM</LIT:lessonName>
            <LIT:lessonScore>90</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>mechanics</LIT:lessonName>
            <LIT:lessonScore>61</LIT:lessonScore>
        </LIT:lesson>
    </LIT:student>
    <LIT:breakLine />
    <LIT:student>
        <LIT:name>coco</LIT:name>
        <LIT:sex>female</LIT:sex>
        <LIT:lesson>
            <LIT:lessonName>math</LIT:lessonName>
            <LIT:lessonScore>90</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>Englist</LIT:lessonName>
            <LIT:lessonScore>95</LIT:lessonScore>

</LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>C++</LIT:lessonName>
            <LIT:lessonScore>80</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>Java</LIT:lessonName>
            <LIT:lessonScore>85</LIT:lessonScore>
        </LIT:lesson>
    </LIT:student>
    <LIT:breakLine />
    <LIT:student>
        <LIT:name>fannWong</LIT:name>
        <LIT:sex>female</LIT:sex>
        <LIT:lesson>
            <LIT:lessonName>math</LIT:lessonName>
            <LIT:lessonScore>85</LIT:lessonScore>
        </LIT:lesson>
        <LIT:lesson>
            <LIT:lessonName>English</LIT:lessonName>
            <LIT:lessonScore>95</LIT:lessonScore>
        </LIT:lesson>
    </LIT:student>
    <LIT:breakLine />
    <LIT:master>
&masterName;    </LIT:master>
</LIT:StuInfo>

四.其他
  下次介绍XSP

【java】jdom解析xml文件

java中有四种分别解析xml文件。分别是,DOM,SAX,DOM4J,JDOM四种。我第一篇就介绍用Jdom解析XML。本人觉得这四种学习其中一种即可。其余三中解析思想差不了多少。况且这四种介绍优缺...
  • zlxdream815
  • zlxdream815
  • 2012年12月05日 16:13
  • 5607

JDOM操作XML文档

解析 xml文档的接口技术有很多 ,DOM  JDOM  SAX  ..其中JDOM技术是最简单的操作,代码操作比DOM  SAX少很多 。 关于这三种技术的介绍可以去网上查询一下。 SAX是基于...
  • yue7603835
  • yue7603835
  • 2012年04月25日 23:41
  • 1987

JDOM解析XML文档

JDOM 不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。 JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DO...
  • xd123softwarec520sdn
  • xd123softwarec520sdn
  • 2012年06月12日 15:39
  • 161

Jdom操作、创建和解析XML

需要导入Jdom的一个jar包; 1、Jdom创建XML package com.shengsiyuan.jdom; import java.io.FileWriter; import org...
  • HarderXin
  • HarderXin
  • 2012年02月23日 09:29
  • 3835

使用Jdom解析XML

关于使用jdom解析xml
  • u011526599
  • u011526599
  • 2016年10月23日 17:27
  • 1885

jdom解析xml文件简单实例

Java解析XML的四种方法—DOM/SAX/jdom/dom4j 为什么要用JDOM?  JDOM是网上流行开源的XML的操作类,用起来简单方便.与他对应的还有几个非常流行的框架,dom4j也是...
  • abc19900828
  • abc19900828
  • 2014年09月22日 17:05
  • 2459

Jdom解析XML文档

JDOM 不光可以很方便的建立XML文档,它的另一个用处是它能够读取并操作现有的 XML 数据。 JDOM的解析器在org.jdom.input.*这个包里,其中的DOMBuilder的功能是将DO...
  • xd123softwarec520sdn
  • xd123softwarec520sdn
  • 2012年06月12日 15:46
  • 259

使用Jdom解析xml格式字符串

package controllers; import java.io.Reader; import java.io.StringReader; import java.util.Iterator;...
  • xd123softwarec520sdn
  • xd123softwarec520sdn
  • 2012年06月12日 15:04
  • 673

jdom生成与解析xml详解

最近关注JDom,转载一下觉得不错的文章,方便以后阅读,在此感谢网路上朋友们共享的好文档! ----------------以下内容为转载---------------------- ...
  • a519781181
  • a519781181
  • 2016年07月29日 14:13
  • 864

用 jdom 解析 xml 文件时如何解决中文问题?如何解析?

package test; import java.io.*; public class DOMTest{ private String inFile = "c:\people.xml"; priva...
  • uniquewonderq
  • uniquewonderq
  • 2015年06月10日 15:20
  • 1098
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jdom解析xml文档
举报原因:
原因补充:

(最多只允许输入30个字)