奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> XML >> 简析JAVA的XML编程
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • .Net的精髓XML和SOAP简

  • 使用XMLHTTP制作域名查

  • 什么是XML

  • XML for Analysis 规范

  • XML for Analysis 规范

  • XML for Analysis 规范

  • 修改大型 XML 文件的有

  • 通过xalan实现关系型数

  • 简析JAVA的XML编程
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-20

    XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一 。由于笔者所从事的电子政务开发较早的引入了XML,所以尝到了许多甜头,在许多项目中利用XML数据交换信息,省去了许多麻烦事,不用制定繁锁的数据格式,利用XML数据易于表达,也利于一线开发者跟踪调试。

    笔者先前也曾发表过相关的文章,比如《简析Delphi中的XML编程》一文,有兴趣的读者可以到Google网(http://www.google.com)去搜索一下,有很多媒体转载。今天笔者想探讨的是关于JAVA中的XML编程,希望对正在或想要学习XML编程的新老读者有所帮助。

    在XML应用中,最常用也最实用的莫过于XML文件的读写,所以笔者通过一个简单的XML文件读写来作简要分析。可以在任何文本编辑器中先建立如下结构的XML文件,类似于HTML结构,但XML语义比较严格,起始标记必须配对,比如"〈学生花名册〉"与"〈/学生花名册〉"对应,空格多少可不必在意,但一般都以缩格形式书写,便于阅读。把此文件命名为Input.xml,可以在任何支持XML的浏览器中打开测试一下,如果输入正确,在浏览中可以看到此文件的树形表示结构。如果您还对XML结构感到比较陌生,建议先看看《简析Delphi中的XML编程》一文中关于XML文件的说明。
    <?xml version="1.0" encoding="GB2312"?>
    <学生花名册>
    <学生 性别 = "男">
    <姓名>李华</姓名>
    <年龄>14</年龄>
    <电话>6287555</电话>
    </学生>
    <学生 性别 = "男">
    <姓名>张三</姓名>
    <年龄>16</年龄>
    <电话>8273425</电话>
    </学生>
    </学生花名册>

    准备工作做完后,接着就开始写实质性的JAVA代码了。为保存从XML文件读入的信息,需要先建一个简单的Bean来保存学生信息,命名为StudentBean,代码如下所示:
    public class StudentBean {
    private String sex; //学生性别
    private String name; //学生姓名
    private int age; //学生年龄
    private String phone; //电话号码

    public void setSex(String s) {
    sex = s;
    }
    public void setName(String s) {
    name = s;
    }
    public void setAge(int a) {
    age = a;
    }
    public void setPhone(String s) {
    phone = s;
    }
    public String getSex() {
    return sex;
    }
    public String getName() {
    return name;
    }
    public int getAge() {
    return age;
    }
    public String getPhone() {
    return phone;
    }
    }

    之后写XML的测试类,笔者把这个类命名为XMLTest,为了读写XML文件,需要导入如下JAVA包,"//"后为注释说明,笔者的环境是JDK 1.3.1_04,在JDK 1.4.0中测试也通过,XML解释器用Apache的Crimson,可以到Apache主页去上载。
    import java.io.*; //Java基础包,包含各种IO操作
    import java.util.*; //Java基础包,包含各种标准数据结构操作
    import javax.xml.parsers.*; //XML解析器接口
    import org.w3c.dom.*; //XML的DOM实现
    import org.apache.crimson.tree.XmlDocument;//写XML文件要用到

    为了保存多个学生信息,还得借助一个集合类(并不是单纯意义上的集合,JAVA中的集合是集合框架的概念,包含向量、列表、哈希表等),这里采用Vector向量类。定义在XMLTest测试类中,命名为student_Vector。然后定义两个方法readXMLFile和writeXMLFile,实现读写操作。代码如下:
    private void readXMLFile(String inFile) throws Exception {
    //为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = null;
    try {
    db = dbf.newDocumentBuilder();
    } catch (ParserConfigurationException pce) {
    System.err.println(pce); //出异常时输出异常信息,然后退出,下同
    System.exit(1);
    }

    Document doc = null;
    try {
    doc = db.parse(inFile);
    } catch (DOMException dom) {
    System.err.println(dom.getMessage());
    System.exit(1);
    } catch (IOException ioe) {
    System.err.println(ioe);
    System.exit(1);
    }
    //下面是解析XML的全过程,比较简单,先取根元素"学生花名册"
    Element root = doc.getDocumentElement();
    //取"学生"元素列表
    NodeList students = root.getElementsByTagName("学生");
    for (int i = 0; i < students.getLength(); i++) {
    //依次取每个"学生"元素
    Element student = (Element) students.item(i);
    //创建一个学生的Bean实例
    StudentBean studentBean = new StudentBean();
    //取学生的性别属性
    studentBean.setSex(student.getAttribute("性别"));
    //取"姓名"元素,下面类同
    NodeList names = student.getElementsByTagName("姓名");
    if (names.getLength() == 1) {
    Element e = (Element) names.item(0);
    Text t = (Text) e.getFirstChild();
    studentBean.setName(t.getNodeValue());
    }

    NodeList ages = student.getElementsByTagName("年龄");
    if (ages.getLength() == 1) {
    Element e = (Element) ages.item(0);
    Text t = (Text) e.getFirstChild();
    studentBean.setAge(Integer.parseInt(t.getNodeValue()));
    }

    NodeList phones = student.getElementsByTagName("电话");
    if (phones.getLength() == 1) {
    Element e = (Element) phones.item(0);
    Text t = (Text) e.getFirstChild();
    studentBean.setPhone(t.getNodeValue());
    }

    student_Vector.add(studentBean);
    }
    }

    private void writeXMLFile(String outFile) throws Exception {
    //为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = null;
    try {
    db = dbf.newDocumentBuilder();
    } catch (ParserConfigurationException pce) {
    System.err.println(pce);
    System.exit(1);
    }

    Document doc = null;
    doc = db.newDocument();

    //下面是建立XML文档内容的过程,先建立根元素"学生花名册"
    Element root = doc.createElement("学生花名册");
    //根元素添加上文档
    doc.appendChild(root);

    //取学生信息的Bean列表
    for (int i = 0; i < student_Vector.size(); i++) {
    //依次取每个学生的信息
    StudentBean studentBean = (StudentBean) student_Vector.get(i);
    //建立"学生"元素,添加到根元素
    Element student = doc.createElement("学生");
    student.setAttribute("性别", studentBean.getSex());
    root.appendChild(student);
    //建立"姓名"元素,添加到学生下面,下同
    Element name = doc.createElement("姓名");
    student.appendChild(name);
    Text tName = doc.createTextNode(studentBean.getName());
    name.appendChild(tName);

    Element age = doc.createElement("年龄");
    student.appendChild(age);
    Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));
    age.appendChild(tAge);

    Element phone = doc.createElement("电话");
    student.appendChild(phone);
    Text tPhone = doc.createTextNode(studentBean.getPhone());
    phone.appendChild(tPhone);
    }
    //把XML文档输出到指定的文件
    FileOutputStream outStream = new FileOutputStream(outFile);
    OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
    ((XmlDocument) doc).write(outWriter, "GB2312");
    outWriter.close();
    outStream.close();
    }

    最后加入测试主函数,如下:
    public static void main(String[] args) throws Exception {
    //建立测试实例
    XMLTest xmlTest = new XMLTest();
    //初始化向量列表
    xmlTest.student_Vector = new Vector();

    System.out.println("开始读Input.xml文件");
    xmlTest.readXMLFile("Input.xml");

    System.out.println("读入完毕,开始写Output.xml文件");
    xmlTest.writeXMLFile("Output.xml");
    System.out.println("写入完成");
    }

    好了,保存好StudentBean和XMLTest,把Input.xml保存到工作目录下。如果您输入很仔细,没敲错字母的话,可以看到"写入完成"了,去瞧瞧Output.xml文件和Input.xml文件是不是一样吧。

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.