﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-~~-文章分类-xml</title><link>http://www.blogjava.net/java-blog/category/28399.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 27 Dec 2007 04:11:56 GMT</lastBuildDate><pubDate>Thu, 27 Dec 2007 04:11:56 GMT</pubDate><ttl>60</ttl><item><title>新手入门：Java XML编程实例解析</title><link>http://www.blogjava.net/java-blog/articles/170714.html</link><dc:creator>一步一步努力向上爬</dc:creator><author>一步一步努力向上爬</author><pubDate>Wed, 26 Dec 2007 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/java-blog/articles/170714.html</guid><wfw:comment>http://www.blogjava.net/java-blog/comments/170714.html</wfw:comment><comments>http://www.blogjava.net/java-blog/articles/170714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/java-blog/comments/commentRss/170714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/java-blog/services/trackbacks/170714.html</trackback:ping><description><![CDATA[<p><span id="zoom">
<p>XML作为全球通用的结构化语言，越来越受人们青睐，各种开发平台（比如Microsoft
Studio系列、Oracle系列、Inprise
Borland系列等）也都把支持XML开发作为宣传口号之一。在许多项目中利用XML数据交换信息，省去了许多麻烦事，不用制定繁锁的数据格式，利用
XML数据易于表达，也利于一线开发者跟踪调试。 </p>
<p>在XML应用中，最常用也最实用的莫过于XML文件的读写，所以笔者通过一个简单的XML文件读写来作简要分析。可以在任何文本编辑器
中先建立如下结构的XML文件，类似于HTML结构，但XML语义比较严格，起始标记必须配对，比如"〈学生花名册〉"与"〈／学生花名册〉"对应，空格
多少可不必在意，但一般都以缩格形式书写，便于阅读。把此文件命名为Input.xml，可以在任何支持XML的浏览器中打开测试一下，如果输入正确，在
浏览中可以看到此文件的树形表示结构。如果您还对XML结构感到比较陌生，建议先看看《简析Delphi中的XML编程》一文中关于XML文件的说明。
</p>
<center>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>&lt;?xml version="1.0" encoding="GB2312"?&gt;<br />
            &lt;学生花名册&gt;<br />
            &lt;学生 性别 = "男"&gt;<br />
            &lt;姓名&gt;李华&lt;/姓名&gt;<br />
            &lt;年龄&gt;14&lt;/年龄&gt;<br />
            &lt;电话&gt;6287555&lt;/电话&gt;<br />
            &lt;/学生&gt;<br />
            &lt;学生 性别 = "男"&gt;<br />
            &lt;姓名&gt;张三&lt;/姓名&gt;<br />
            &lt;年龄&gt;16&lt;/年龄&gt;<br />
            &lt;电话&gt;8273425&lt;/电话&gt;<br />
            &lt;/学生&gt;<br />
            &lt;/学生花名册&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p>准备工作做完后，接着就开始写实质性的JAVA代码了。为保存从XML文件读入的信息，需要先建一个简单的Bean来保存学生信息，命名为StudentBean，代码如下所示：
</p>
<center>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　public class StudentBean {<br />
            private String sex; //学生性别<br />
            private String name; //学生姓名<br />
            private int age; //学生年龄<br />
            private String phone; //电话号码<br />
            <br />
            public void setSex(String s) {<br />
            sex = s;<br />
            }<br />
            public void setName(String s) {<br />
            name = s;<br />
            }<br />
            public void setAge(int a) {<br />
            age = a;<br />
            }<br />
            public void setPhone(String s) {<br />
            phone = s;<br />
            }<br />
            public String getSex() {<br />
            return sex;<br />
            }<br />
            public String getName() {<br />
            return name;<br />
            }<br />
            public int getAge() {<br />
            return age;<br />
            }<br />
            public String getPhone() {<br />
            return phone;<br />
            }<br />
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p>之后写XML的测试类，笔者把这个类命名为XMLTest，为了读写XML文件，需要导入如下JAVA包，"//"后为注释说明，笔者的环境是
JDK 1.3.1_04，在JDK 1.4.0中测试也通过，XML解释器用Apache的Crimson，可以到Apache主页去上载。 </p>
<center>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　import java.io.*;<br />
            //Java基础包，包含各种IO操作<br />
            import java.util.*;<br />
            //Java基础包，包含各种标准数据结构操作<br />
            import javax.xml.parsers.*;<br />
            //XML解析器接口<br />
            import org.w3c.dom.*;<br />
            //XML的DOM实现<br />
            import org.apache.crimson.tree.XmlDocument;<br />
            //写XML文件要用到</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p>为了保存多个学生信息，还得借助一个集合类(并不是单纯意义上的集合，JAVA中的集合是集合框架的概念，包含向量、列表、哈希表等），这里采用
Vector向量类。定义在XMLTest测试类中，命名为student_Vector。然后定义两个方法readXMLFile和
writeXMLFile，实现读写操作。代码如下： </p>
<center>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　private void readXMLFile(String inFile) throws Exception {<br />
            //为解析XML作准备<br />
            //创建DocumentBuilderFactory实例,指定DocumentBuilder<br />
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();<br />
            DocumentBuilder db = null;<br />
            try {<br />
            db = dbf.newDocumentBuilder();<br />
            } catch (ParserConfigurationException pce) {<br />
            System.err.println(pce);<br />
            //出异常时输出异常信息，然后退出，下同<br />
            System.exit(1);<br />
            }<br />
            Document doc = null;<br />
            try {<br />
            doc = db.parse(inFile);<br />
            } catch (DOMException dom) {<br />
            System.err.println(dom.getMessage());<br />
            System.exit(1);<br />
            } catch (IOException ioe) {<br />
            System.err.println(ioe);<br />
            System.exit(1);<br />
            }<br />
            //下面是解析XML的全过程，<br />
            //比较简单，先取根元素"学生花名册"<br />
            Element root = doc.getDocumentElement();<br />
            //取"学生"元素列表<br />
            NodeList students = root.getElementsByTagName("学生");<br />
            for (int i = 0; i &lt; students.getLength(); i++) {<br />
            //依次取每个"学生"元素<br />
            Element student = (Element) students.item(i);<br />
            //创建一个学生的Bean实例<br />
            StudentBean studentBean = new StudentBean();<br />
            //取学生的性别属性<br />
            studentBean.setSex(student.getAttribute("性别"));<br />
            //取"姓名"元素，下面类同<br />
            NodeList names = student.getElementsByTagName("姓名");<br />
            if (names.getLength() == 1) {<br />
            Element e = (Element) names.item(0);<br />
            Text t = (Text) e.getFirstChild();<br />
            studentBean.setName(t.getNodeValue());<br />
            }<br />
            <br />
            NodeList ages = student.getElementsByTagName("年龄");<br />
            if (ages.getLength() == 1) {<br />
            Element e = (Element) ages.item(0);<br />
            Text t = (Text) e.getFirstChild();<br />
            studentBean.setAge(Integer.parseInt(t.getNodeValue()));<br />
            }<br />
            <br />
            NodeList phones = student.getElementsByTagName("电话");<br />
            if (phones.getLength() == 1) {<br />
            Element e = (Element) phones.item(0);<br />
            Text t = (Text) e.getFirstChild();<br />
            studentBean.setPhone(t.getNodeValue());<br />
            }<br />
            <br />
            student_Vector.add(studentBean);<br />
            }<br />
            }<br />
            <br />
            private void writeXMLFile(String outFile) throws Exception {<br />
            //为解析XML作准备，<br />
            //创建DocumentBuilderFactory实例,指定DocumentBuilder<br />
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();<br />
            DocumentBuilder db = null;<br />
            try {<br />
            db = dbf.newDocumentBuilder();<br />
            } catch (ParserConfigurationException pce) {<br />
            System.err.println(pce);<br />
            System.exit(1);<br />
            }<br />
            <br />
            Document doc = null;<br />
            doc = db.newDocument();<br />
            <br />
            //下面是建立XML文档内容的过程，<br />
            /先建立根元素"学生花名册"<br />
            Element root = doc.createElement("学生花名册");<br />
            //根元素添加上文档<br />
            doc.appendChild(root);<br />
            <br />
            //取学生信息的Bean列表<br />
            for (int i = 0; i &lt; student_Vector.size(); i++) {<br />
            //依次取每个学生的信息<br />
            StudentBean studentBean = (StudentBean) student_Vector.get(i);<br />
            //建立"学生"元素，添加到根元素<br />
            Element student = doc.createElement("学生");<br />
            student.setAttribute("性别", studentBean.getSex());<br />
            root.appendChild(student);<br />
            //建立"姓名"元素，添加到学生下面，下同<br />
            Element name = doc.createElement("姓名");<br />
            student.appendChild(name);<br />
            Text tName = doc.createTextNode(studentBean.getName());<br />
            name.appendChild(tName);<br />
            <br />
            Element age = doc.createElement("年龄");<br />
            student.appendChild(age);<br />
            Text tAge = doc.createTextNode(String.valueOf(studentBean.getAge()));<br />
            age.appendChild(tAge);<br />
            <br />
            Element phone = doc.createElement("电话");<br />
            student.appendChild(phone);<br />
            Text tPhone = doc.createTextNode(studentBean.getPhone());<br />
            phone.appendChild(tPhone);<br />
            }<br />
            //把XML文档输出到指定的文件<br />
            FileOutputStream outStream = new FileOutputStream(outFile);<br />
            OutputStreamWriter outWriter = new OutputStreamWriter(outStream);<br />
            ((XmlDocument) doc).write(outWriter, "GB2312");<br />
            outWriter.close();<br />
            outStream.close();<br />
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p>最后加入测试主函数，如下：
</p>
<center>
<table bordercolordark="#ffffff" bordercolorlight="black" align="center" border="1" cellpadding="2" cellspacing="0" width="400">
    <tbody>
        <tr>
            <td style="font-size: 9pt;" bgcolor="#e6e6e6">
            <pre><ccid_code>　public static void main(String[] args) throws Exception {<br />
            //建立测试实例<br />
            XMLTest xmlTest = new XMLTest();<br />
            //初始化向量列表<br />
            xmlTest.student_Vector = new Vector();<br />
            <br />
            System.out.println("开始读Input.xml文件");<br />
            xmlTest.readXMLFile("Input.xml");<br />
            <br />
            System.out.println("读入完毕,开始写Output.xml文件");<br />
            xmlTest.writeXMLFile("Output.xml");<br />
            System.out.println("写入完成");<br />
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p>好了，保存好StudentBean和XMLTest，把Input.xml保存到工作目录下。可以看到"写入完成"了。</p>
</span></p>
<img src ="http://www.blogjava.net/java-blog/aggbug/170714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/java-blog/" target="_blank">一步一步努力向上爬</a> 2007-12-26 20:21 <a href="http://www.blogjava.net/java-blog/articles/170714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>