jdom解析xml文档

一.简介
  
  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值