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

相关文章推荐

JDom解析和生成XML文档

一、前言     JDom是一套非常优秀的java开源api,主要用于读写xml文档,具有性能优异、功能强大、和非常方便使用的特点,并且把jdk自带的解析方式SAX和Dom的功能有效地结合起来。...

Jdom解析XML文档

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

用Jdom编写及解析xml文档

package WildCat.Xml.JDom; import java.io.FileNotFoundException; import java.io.FileOutputStream; im...

JDOM解析XML文档

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

JDom解析和生成XML文档

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317...

解析XML文档方式之三:jdom方式

一、简介:      Jdom是用Java语言读、写、操作XML的新API函数。Jason Hunter 和 Brett McLaughlin公开发布了它的1.0版本。在直觉、简单和高效的前提下,这些...

JDOM解析XML字符串(非XML文档)

来自:http://www.blogjava.net/XXNiuLang/archive/2007/07/20/131448.html package cmo.shubai.jdom; ...

java与xml之JDOM生成和解析XML文档

JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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