关闭

jdom解析xml文档

标签: xml文档javaapiencodingmath
696人阅读 评论(1) 收藏 举报

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

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49207次
    • 积分:682
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:40篇
    • 译文:1篇
    • 评论:11条
    文章分类
    最新评论