1. 程式人生 > >Java中讀取XML檔案,生成XML格式的字串並解析這個字串

Java中讀取XML檔案,生成XML格式的字串並解析這個字串

由於最近要用的是XML格式的字串,而不用寫到檔案中,所以對原始程式碼進行了修改如下:

要讀的xml檔案

<?xml version="1.0" encoding="GB2312"?>
<學生花名冊>
     <學生 性別 = "男">
         <姓名>李華</姓名>
         <年齡>14</年齡>
     </學生>
     <學生 性別 = "男">
         <姓名>張三</姓名>
         <年齡>16</年齡> 
     </學生>
</學生花名冊>
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class DomTest {
    Vector students_Vector;

    private Vector readXMLFile(String file) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        Document doc = builder.parse(file); // 獲取到xml檔案
        // 下面開始讀取
        Element root = doc.getDocumentElement(); // 獲取根元素
        NodeList students = root.getElementsByTagName("學生");
        students_Vector = new Vector();
        for (int i = 0; i < students.getLength(); i++) {
            // 一次取得每一個學生元素
            Element ss = (Element) students.item(i);

            // 建立一個學生的例項
            student stu = new student();
            stu.setSex(ss.getAttribute("性別"));

            NodeList names = ss.getElementsByTagName("姓名");
            Element e = (Element) names.item(0);
            Node t = e.getFirstChild();
            stu.setName(t.getNodeValue());

            NodeList ages = ss.getElementsByTagName("年齡");
            e = (Element) ages.item(0);
            t = e.getFirstChild();
            stu.setAge(Integer.parseInt(t.getNodeValue()));

            students_Vector.add(stu);
        }
        return students_Vector;
    }

    /**
     * 功能:直接提取XML格式字串中的資訊
     */
    private Vector readXMLString(String xmlStr) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = dbf.newDocumentBuilder();
        InputStream inputStream = new ByteArrayInputStream(xmlStr.getBytes());
        Document doc = builder.parse(inputStream); //
        // 下面開始讀取
        Element root = doc.getDocumentElement(); // 獲取根元素
        NodeList students = root.getElementsByTagName("學生");
        students_Vector = new Vector();
        for (int i = 0; i < students.getLength(); i++) {
            // 一次取得每一個學生元素
            Element ss = (Element) students.item(i);

            // 建立一個學生的例項
            student stu = new student();
            stu.setSex(ss.getAttribute("性別"));

            NodeList names = ss.getElementsByTagName("姓名");
            Element e = (Element) names.item(0);
            Node t = e.getFirstChild();
            stu.setName(t.getNodeValue());

            NodeList ages = ss.getElementsByTagName("年齡");
            e = (Element) ages.item(0);
            t = e.getFirstChild();
            stu.setAge(Integer.parseInt(t.getNodeValue()));

            students_Vector.add(stu);
        }
        return students_Vector;
    }

    // 將Document內容 寫入XML字串並返回
    private String callWriteXmlString(Document doc, String encoding) {

        try {
            Source source = new DOMSource(doc);
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            OutputStreamWriter write = new OutputStreamWriter(outStream);
            Result result = new StreamResult(write);

            Transformer xformer = TransformerFactory.newInstance()
                    .newTransformer();
            xformer.setOutputProperty(OutputKeys.ENCODING, encoding);

            xformer.transform(source, result);
            return outStream.toString();

        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
            return null;
        } catch (TransformerException e) {
            e.printStackTrace();
            return null;
        }

    }

    /**
     * 功能:生成XML格式的字串
     */
    public String writeXMLString() {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        try {
            builder = dbf.newDocumentBuilder();
        } catch (Exception e) {
        }
        Document doc = builder.newDocument();

        Element root = doc.createElement("學生花名冊");
        doc.appendChild(root); // 將根元素新增到文件上

        // 獲取學生資訊
        for (int i = 0; i < students_Vector.size(); i++) {
            student s = (student) students_Vector.get(i);
            // 建立一個學生
            Element stu = doc.createElement("學生");
            stu.setAttribute("性別", s.getSex());
            root.appendChild(stu);// 新增屬性

            // 建立文字姓名節點
            Element name = doc.createElement("姓名");
            stu.appendChild(name);
            Text tname = doc.createTextNode(s.getName());
            name.appendChild(tname);

            // 建立文字年齡節點
            Element age = doc.createElement("年齡");
            stu.appendChild(age); // 將age新增到學生節點上
            Text tage = doc.createTextNode(String.valueOf(s.getAge()));
            age.appendChild(tage); // 將文字節點放在age節點上
        }
        try {
            String result = callWriteXmlString(doc, "gb2312");
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 主函式
     */
    public static void main(String args[]) {
        String str = "xml\\student.xml";
        DomTest t = new DomTest();
        System.out.println("解析原始XML檔案:");
        try {
            Vector v = t.readXMLFile(str);
            Iterator it = v.iterator();
            while (it.hasNext()) {
                student s = (student) it.next();
                System.out.println(s.getName() + "\t" + s.getAge() + "\t"
                        + s.getSex());
            }
        } catch (Exception e) {
            e.printStackTrace();

        }
        String xmlStr = t.writeXMLString();
        System.out.println("\n生成的XML字串:\n" + xmlStr);
        try {
            Vector v = t.readXMLString(xmlStr);
            Iterator it = v.iterator();
            System.out.println("\n解析生成的XML字串:");
            while (it.hasNext()) {
                student s = (student) it.next();
                System.out.println(s.getName() + "\t" + s.getAge() + "\t"
                        + s.getSex());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

class student {
    private String sex;
    private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSex(String s) {
        sex = s;
    }

    public String getSex() {
        return sex;
    }

    public void setName(String n) {
        name = n;
    }

    public String getName() {
        return name;
    }
}

輸出:

解析原始XML檔案:
李華    14    男
張三    16    男

生成的XML字串:
<?xml version="1.0" encoding="GB2312" standalone="no"?><學生花名冊><學生 性別="男"><姓名>李華</姓名><年齡>14</年齡></學生><學生 性別="男"><姓名>張三</姓名><年齡>16</年齡></學生></學生花名冊>

解析生成的XML字串:
李華    14    男
張三    16    男

相關推薦

Java讀取XML檔案生成XML格式字串解析這個字串

由於最近要用的是XML格式的字串,而不用寫到檔案中,所以對原始程式碼進行了修改如下: 要讀的xml檔案 <?xml version="1.0" encoding="GB2312"?> <學生花名冊> <學生 性別 = "男">

Java讀取配置檔案(properties、xml

1. 利用java.util提供的工具類Properties       - 首先我這邊有個file.properties檔案       - 然後去讀取這個檔案

使用java實現讀取txt檔案匯入到MongoDB

1.txt檔案如下 2.建立main主類 public static void main(String[] args) {        MongoClient mongo = new MongoClient("localhost"

如何讀取xml檔案根據xml節點屬性查詢輸出xml檔案

主要是應用SimpleXML和遞迴函式來根據key值來查詢,並將結果以xml格式輸出。 <?php header("Content-type: text/xml"); //以xml格式輸出檔案 @$key=$_GET['key']; $find=false; //echo $key."<

Java如何解析某個目錄下xml檔案XML檔案轉換為報表資料來源?

在Java開發的報表工具FineReport中,假如在目錄下儲存了幾個XML檔案,希望把XML檔案轉換為報表資料來源,同時希望展示動態xml資料來源的效果,這時可通過引數的方式,動態獲取xml欄位中的值再作為報表資料來源。Northwind.xml記錄資料格式如下:<?

Java讀取Excel檔案生成SQL語句

import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import java.io.*; public class Main { public static void

C#基礎精華06(Linq To XML讀取xml檔案寫入xml

Linq To XML xml 標記語言 html  xml 側重於儲存資料   html顯示資料 註釋<!-- 註釋 --> xml沒有預定義標籤  html有 核心類XElement,一個XElement表示一個元素,new XElement(“Order”

libxml2庫 讀取xml檔案xml檔案

所用xml檔案內容: <?xml version="1.0" encoding="utf-8"?> <style name="file"> <contents name="type"> <content>.mp3&

Java專案讀取properties檔案以及六種獲取路徑的方法

Java讀取properties檔案的方法比較多,網上最多的文章是"Java讀取properties檔案的六種方法",但在Java應用中,最常用還是通過java.lang.Class類的getResourceAsStream(String name) 方法來實現,但我見到眾多讀取properties檔案的

Java讀取配置檔案的內容將其賦值給靜態變數的方法

應用場景 專案開發中某個功能需要抽取成方法寫成一個工具類,提供給別人使用。寫過工具類的人都知道,工具類中的方法一般都是靜態方法,可以直接使用類名點方法名呼叫, 使用很方便,比如判斷某個物件是否為空的方式Objects.equals().由於我寫的這個工具類中需要讀取配置檔案中的內容,但是常規方法注入成員變數時

java讀取Property檔案屬性工具類

java中讀取Property配置檔案屬性工具類: import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * 讀取Property配置檔

java selenium 讀取配置檔案報錯中文亂碼

參考引自:https://blog.csdn.net/qq_27093465/article/details/70765870 根據自己問題解決: package com.property; import java.io.BufferedInputStream; import java.i

讀取txt檔案生成csv檔案

最近做了個小程式,要求在同文件夾下的txt檔案,處理內容之後,生成csv檔案。 1 import java.io.*; 2 import java.util.ArrayList; 3 import java.util.List; 4 5 public class Simplify

java讀取配置檔案的一些方法 getResourceAsStream 和 直接 FileInputStream 以及 配置System.getProperty("user.dir")所得的工作目錄

配置檔案位於 /src/ 下的情況已經由上述博主列出,需要的可以移步檢視,即以下幾個情況 1.路徑:src/aa.xml 2.位於src下同一個包下 3.位於src下不同包 不過本博主的專案是web專案,而配置檔案放在src檔案下容易因為快取導致更新不及時,

java的註釋規範生成javadoc

java中的註釋,大家應該已經很熟悉了。 文件註釋可以用於對類、屬性、方法等進行說明。寫文件註釋時除了需要使用 /** .... */ 限定之外,還需要注意註釋內部的一些細節問題。 1文件和文件註釋的格式化 生成的文件是 HTML 格式,而這些 HTML 格式

python讀取txt檔案windows下麼有毛病到Linux下總是隻有最後一行有效怎麼解決?

比如:這個txt有5行, fin = open('F:\\temp\\name.txt','r') for line in fin: strsname = line.rstrip('\n') AAA('F:\\temp','F:\\temp\\2',str

五種方式讓你在java讀取properties檔案內容不再是難題

一、背景   最近,在專案開發的過程中,遇到需要在properties檔案中定義一些自定義的變數,以供java程式動態的讀取,修改變數,不再需要修改程式碼的問題。就藉此機會把Spring+SpringMVC+Mybatis整合開發的專案中通過java程式讀取properties檔案內容的方式進行了梳理和分析

Java讀取配置檔案的方式

 一、使用org.apache.commons.configuration 需要使用的jar包:commons-collections-3.2.1.jar、commons-configuratio

java讀取配置檔案的方法

一、使用org.apache.commons.configuration 需要使用的是jar包:commons-collections-3.2.1.jar、commons-configuration-1.10.jar、commons-lang-2.6.jar和commons

java讀取properties檔案內容

package com.tgb.SpringActivemq.utils; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; impo