Java中的XML


 

  XML是一種可擴展的標記語言,可擴展就是<>內的東西可以自己定義,可以隨便寫。標記語言就是加了<>符號的 。HTML是超文本標記語言,不可以拓展,因為你寫個<p> 瀏覽器知道這個是段落,你寫個<shuyunquan>瀏覽器就不認識了,所以不可拓展

講講xml的書寫格式:

1.開頭固定

2.只能有一個根元素

3.沒了

<?xml version="1.0" encoding="UTF-8"?>
<Students>
    <student>
        <name>許嵩</name>
        <age>32</age>
    </student>
    <student>
        <name>蜀雲泉</name>
        <age>23</age>
    </student>
</Students>

我寫了一個,開頭的第一行是固定的,當然也可以多寫。這個是告訴別人,我是xml文件

下面來介紹一下Java是怎么操作xml的,也可以說是怎么操作DOM的,以前一直聽說DOM,Dom就是不知道是什么,原來DOM就是內存中的一個樹形結構的數據稱謂,xml的數據就是樹形結構的,在內存中就是DOM

這篇文章只是介紹一下,具體操作處理XML文件還是要使用Dom4j,看這篇文章

一、Java讀取xml

比如上面的xml文件,我想獲取第二個student元素的name里面的文本,操作如下:

    private File f=new File("F:/Study Java/ch1helloworld/src/main/java/com/StadyJava/day2/xmldemo.xml");

    public void testDocument() throws ParserConfigurationException, IOException, SAXException {
        //1.
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        //2.
        DocumentBuilder builder=factory.newDocumentBuilder();
        //3 經過這3步獲取到了文檔
        Document doc=builder.parse(f);

        //上面的三步可以寫成這樣
        //Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);

        //已經獲取了文檔對象,現在獲取xml的根元素
        Element root=doc.getDocumentElement();

        //獲取第二個student 因為返回的是父類型Node,所以需要強轉一下
        Element student2=(Element) root.getElementsByTagName("student").item(1);

        //獲取第二個student元素的子元素name
        Element name2=(Element) student2.getElementsByTagName("name").item(0);

        //獲取name元素的文本內容
        System.out.println(name2.getTextContent());

    }

1.獲取xml文件

2.獲取根元素students

3.獲取根元素下面的第二個student元素

4.獲取第二個student元素的name元素

5.獲取name的文本內容

 

二、Java更改xml

這里我們准備把許嵩的年齡改為18

其實操作和上面的讀取差不多,只不過多了一個從內存更新到磁盤的步驟

 public void setxml() throws  Exception {

        //獲取文檔對象
        Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);

        //已經獲取了文檔對象,現在獲取xml的根元素
        Element root=doc.getDocumentElement();

        //獲取第一個student 因為返回的是父類型Node,所以需要強轉一下
        Element student1=(Element) root.getElementsByTagName("student").item(0);

        //獲取第一個student元素的子元素age
        Element age1=(Element) student1.getElementsByTagName("age").item(0);

        //更新age元素的文本內容,這里僅僅的更新了內存中的DOM,還要更新到磁盤的xml源文件
        age1.setTextContent("18");

        //同步內存中的數據到磁盤中的源文件
        Transformer trans=TransformerFactory.newInstance().newTransformer();
        Source xmlSource=new DOMSource(doc); //內存中的DOM
        Result outputTarget=new StreamResult(f); //磁盤中的xml文件
        trans.transform(xmlSource,outputTarget);//從內存更新到磁盤

    }

 

三、Java插入xml數據 

要插入新數據,要創建元素,要給元素賦值,要給元素之間綁定關系

public void Insertxml() throws Exception{
        //獲取文檔對象
        Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);

        //已經獲取了文檔對象,現在獲取xml的根元素
        Element root=doc.getDocumentElement();

        //創建一個student元素以及子元素,注意,子元素和student之間還需要綁定
        Element student=doc.createElement("student");
        Element name=doc.createElement("name");
        Element age=doc.createElement("age");
        //給student元素賦值
        name.setTextContent("林俊傑");
        age.setTextContent("33");
        //把子元素和student之間進行綁定
        student.appendChild(name);
        student.appendChild(age);
        //把student元素和DOM的root根節點綁定起來
        root.appendChild(student);

        //更新
        Transformer trans=TransformerFactory.newInstance().newTransformer();
        Source xmlSource=new DOMSource(doc); //內存中的DOM
        Result outputTarget=new StreamResult(f); //磁盤中的xml文件
        trans.transform(xmlSource,outputTarget);//從內存更新到磁盤
    }

就是這樣,代碼更改的就中間那一段。新增數據后是沒有空格格式的,所以數據都在一行,看起來不美觀

 

四、Java刪除xml元素

還是,先操作DOM,然后再更新到磁盤

 public void deletexml() throws Exception {
        //獲取文檔對象
        Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
        //已經獲取了文檔對象,現在獲取xml的根元素
        Element root=doc.getDocumentElement();
        //獲取要刪除的元素,記得強轉
        Element student=(Element) root.getElementsByTagName("student").item(2);
        //刪除
        root.removeChild(student);
        //同步操作
        Transformer trans=TransformerFactory.newInstance().newTransformer();
        Source xmlSource=new DOMSource(doc); //內存中的DOM
        Result outputTarget=new StreamResult(f); //磁盤中的xml文件
        trans.transform(xmlSource,outputTarget);//從內存更新到磁盤

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM