溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

XML解析中DOM的示例分析

發(fā)布時(shí)間:2021-09-17 14:53:38 來源:億速云 閱讀:118 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)XML解析中DOM的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

1.XML編程

1.1.XML解析技術(shù)介紹

1.XML解析分為:dom解析和sax解析

  • dom:(Document Object Model,即文檔對象模型),是W3C組織推薦的處理XML的一種方式

  • sax:(Simple API for XML),不是官方標(biāo)準(zhǔn),但它是XML社區(qū)事實(shí)上的標(biāo)準(zhǔn),幾乎所有的XML解析器都支持它

SAX解析采用事件驅(qū)動(dòng)模型邊讀邊解析:從上到下一行一行解析,解析到某一元素,調(diào)用相應(yīng)的解析方法。
DOM根據(jù)XML層級結(jié)構(gòu)在內(nèi)存中分配一個(gè)樹形結(jié)構(gòu),把XML的標(biāo)簽,屬性和文本等元素都封裝成樹的節(jié)點(diǎn)對象。

不同的公司和組織提供了針對DOM和SAX兩種方式的解析器:

  • Sun的JAXP

  • Dom4j組織的dom4j(最常用,例如hibernate)

  • JDom組織的jdom

其中的JASP是J2SE的一部分,它分別針對DOM和SAX提供了DOM和SAX解析器。

在這里也主要介紹三種解析:dom、sax和dom4j

1.2.JAXP介紹

Sun公司提供了Java API for XML Parsing(JAXP)接口來使用SAX和DOM,通過JAXP,我們可以使用任何與JAXP兼容的XML解析器。

JAXP開發(fā)包是J2SE的一部分,它由javax.xml、org.w3c.dom、org.xml.sax包及其子包組成

在javax.xml.parsers包中,定義了幾個(gè)工廠類,程序員調(diào)用這些工廠類,可以得到對xml文檔進(jìn)行解析的DOM或SAX的解析器對象。

2.JAXP之DOM解析

2.1.XML DOM節(jié)點(diǎn)樹

首先說明JAXP解析XML的DOM對象的原理,XML DOM把XML文檔視為一顆節(jié)點(diǎn)樹(node-tree),樹中的所有節(jié)點(diǎn)彼此之間都有關(guān)系。可通過這棵樹訪問所有的節(jié)點(diǎn)??梢孕薷幕蛘邉h除它們的內(nèi)容,也可以創(chuàng)建新的元素。

比如,現(xiàn)在的XML文檔如下(該例子來自w3cschool在線教程):

<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="cooking">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book category="web" cover="paperback">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
    <book category="web">
        <title lang="en">XQuery Kick Start</title>
        <author>James McGovern</author>
        <author>Per Bothner</author>
        <author>Kurt Cagle</author>
        <author>James Linn</author>
        <author>Vaidyanathan Nagarajan</author>
        <year>2003</year>
        <price>49.99</price>
    </book></bookstore>

這棵樹從根節(jié)點(diǎn)開始,在樹的最低層級向文本節(jié)點(diǎn)長出枝條:

XML解析中DOM的示例分析

【要知道的幾個(gè)知識點(diǎn)】:
1.dom會把xml文件看做一棵樹,并加載到內(nèi)存
2.dom特別適合做crud操作
3.dom不太適合去操作比較大的xml文件(占用內(nèi)存)
4.dom會把xml文件中每一個(gè)元素、屬性、文本都映射成對應(yīng)的Node對象。

2.2.獲得JAXP中的DOM解析器步驟

1.調(diào)用DocumentBuilderFactory.newInstance()方法得到創(chuàng)建DOM解析器的工廠
2.調(diào)用工廠對象的newDocumentBuilder方法得到DOM解析器對象
3.調(diào)用DOM解析器對象的parse()方法解析XML文檔,得到代表整個(gè)文檔的Document對象,進(jìn)行可以利用DOM特性對整個(gè)XML文檔進(jìn)行操作了。

2.3.JAXP之DOM解析實(shí)例:

XML文檔如下:

<?xml version="1.0" encoding="utf-8"?><班級>
    <學(xué)生 地址="香港">
        <名字>周小星</名字>    
        <年齡>23</年齡>
        <介紹>學(xué)習(xí)刻苦</介紹>
    </學(xué)生>   
    <學(xué)生 地址="澳門">
        <名字>林曉</名字> 
        <年齡>25</年齡>
        <介紹>是一個(gè)好學(xué)生</介紹>
    </學(xué)生>   </班級>

2.3.1.讀取XML文檔

首先使用2.2中介紹了三個(gè)步驟得到代表整個(gè)文檔的document對象,并調(diào)用我們所寫的read(Document document)方法,如下:

// 1.創(chuàng)建一個(gè)DocumentBuilderFactoryDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.通過工廠實(shí)例得到DocumentBuilder對象DocumentBuilder builder = factory.newDocumentBuilder();
// 3.指定要解析的xml文件,返回document對象Document document = builder.parse(new File("src/myClass.xml"));
read(document);

其中的read方法是這么寫的:

/**
* 顯示所有學(xué)生的所有信息
 * @param document
 */public static void read(Document document){    // 通過學(xué)生這個(gè)標(biāo)簽名字得到NodeList
    NodeList nodeList = document.getElementsByTagName("學(xué)生");    
    for(int i=0;i<nodeList.getLength();i++){        // 因?yàn)镋lement是Node的子接口,所有這里可以轉(zhuǎn)換成Element
        // 從而可以使用更多的方法
        Element student = (Element)nodeList.item(i);        // 獲取屬性
        String address = student.getAttribute("地址");
        System.out.println(address);        // 得到學(xué)生的所有子節(jié)點(diǎn),并循環(huán)輸出
        NodeList childList = student.getChildNodes();        for(int j=0;j<childList.getLength();j++){
            Node node = childList.item(j);            if(node.getNodeType() == Node.ELEMENT_NODE)
                System.out.println(node.getNodeName()+":"+node.getTextContent());
        }
        System.out.println("-------------");
    }    // 這樣一層一層向下查詢也可以
    //Element name = (Element)student.getElementsByTagName("名字").item(0);
    //System.out.println(name.getTextContent());        }

最后的運(yùn)行結(jié)果如下所示:

XML解析中DOM的示例分析

2.3.2.更新XML文檔

利用DOM更新XML文檔一定要使用Transformer類將更改寫入文件,否則只是更改了在內(nèi)存中的XML文檔對象。

  • javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉(zhuǎn)換為某種格式后進(jìn)行輸出,例如把xml文件應(yīng)用樣式表后轉(zhuǎn)成一個(gè)html文檔。利用這個(gè)對象,當(dāng)然也可以把Document對象又重新寫回到一個(gè)XML文件中

  • Transformer類通過transform方法完成轉(zhuǎn)換操作,該方法接收一個(gè)源和一個(gè)目的地。我們可以通過:

javax.xml.transform.dom.DOMSource類來關(guān)聯(lián)要轉(zhuǎn)換的document對象
 用javax.xml.transform.stream.StreamResult對象來表示數(shù)據(jù)的目的地

  • Transformer對象通過TransformerFactory獲得

【1】添加元素
我們可以向上述XML中添加一個(gè)學(xué)生子節(jié)點(diǎn),如下:

/**
 * 添加學(xué)生
 * 
 * @param document
 * @throws Exception
 */public static void add(Document document) throws Exception {    // 創(chuàng)建一個(gè)新的學(xué)生節(jié)點(diǎn)
    Element newStudent = document.createElement("學(xué)生");    // 給新的學(xué)生添加地址屬性
    newStudent.setAttribute("地址", "舊金山");    // 創(chuàng)建學(xué)生的子節(jié)點(diǎn)
    Element newStudent_name = document.createElement("名字");
    newStudent_name.setTextContent("小明");
    Element newStudent_age = document.createElement("年齡");
    newStudent_age.setTextContent("25");
    Element newStudent_intro = document.createElement("介紹");
    newStudent_intro.setTextContent("這是一個(gè)好孩子");    // 將子節(jié)點(diǎn)添加到學(xué)生節(jié)點(diǎn)上
    newStudent.appendChild(newStudent_name);
    newStudent.appendChild(newStudent_age);
    newStudent.appendChild(newStudent_intro);    // 把新的學(xué)生節(jié)點(diǎn)添加到根節(jié)點(diǎn)下
    document.getDocumentElement().appendChild(newStudent);    // 更新XML文檔
    // 得到TransformerFactory
    TransformerFactory tff = TransformerFactory.newInstance();    // 通過TransformerFactory得到一個(gè)轉(zhuǎn)換器
    Transformer tf = tff.newTransformer();    // 更新當(dāng)前的XML文件
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

【2】刪除元素
同樣的,我們也可以刪除一個(gè)學(xué)生節(jié)點(diǎn),如下:

/**
* 刪除第一個(gè)學(xué)生節(jié)點(diǎn)
 * 
 * @param document
 */public static void delete(Document document) throws Exception {    // 首先找到這個(gè)學(xué)生,這里可以不用轉(zhuǎn)為Element
    Node student = document.getElementsByTagName("學(xué)生").item(0);    // 通過它的父節(jié)點(diǎn)來刪除
    student.getParentNode().removeChild(student);    // 更新這個(gè)文檔
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

【3】更改元素的值
比如,我們也可以將第一個(gè)學(xué)生的名字改為松江,如下:

/**
* 把第一個(gè)學(xué)生的元素名字改為宋江
 * 
 * @param document
 */public static void update_name(Document document) throws Exception{
    Element student = (Element) document.getElementsByTagName("學(xué)生").item(0);
    Element name = (Element) student.getElementsByTagName("名字").item(0);
    name.setTextContent("宋江");    // 更新這個(gè)文檔
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

【4】更改或刪除元素的屬性

/**
* 刪除第一個(gè)學(xué)生節(jié)點(diǎn)的屬性
 * 
 * @param document
 */public static void delete_attribute(Document document) throws Exception {    // 首先找到這個(gè)學(xué)生
    Element student = (Element) document.getElementsByTagName("學(xué)生").item(0);    // 刪除student的地址屬性
    student.removeAttribute("地址");    // 更新屬性
    // student.setAttribute("地址", "新地址");

    // 更新這個(gè)文檔
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

上述列舉了幾個(gè)更新元素(節(jié)點(diǎn))的例子,更一般的需求是這樣的:將名字是周小星的同學(xué)的年齡改為30,這時(shí)候我們需要去遍歷XML文檔,找到對應(yīng)的節(jié)點(diǎn),再進(jìn)行修改。

另外,所有關(guān)于更新的方法中都用到了TransformerFactory來進(jìn)行實(shí)際的更新,所以,我們可以把這三句話寫成一個(gè)函數(shù),從而避免代碼冗余,如下:

public static void update(Document document, String path) throws Exception {
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(path)));
}

1.XML編程

XML編程,就是對XML文件進(jìn)行crud操作。

那么為什么要用java或者C/C++對XML進(jìn)行crud操作呢?
1.XML作為數(shù)據(jù)傳遞需要解析
2.XML作為配置文件需要讀取
3.XML作為小型數(shù)據(jù)庫,需要進(jìn)行crud操作

w3C組織為了大家解析XML方便,定義了一套規(guī)范(API)

1.1.XML解析技術(shù)介紹

1.XML解析分為:dom解析和sax解析

  • dom:(Document Object Model,即文檔對象模型),是W3C組織推薦的處理XML的一種方式

  • sax:(Simple API for XML),不是官方標(biāo)準(zhǔn),但它是XML社區(qū)事實(shí)上的標(biāo)準(zhǔn),幾乎所有的XML解析器都支持它

SAX解析采用事件驅(qū)動(dòng)模型邊讀邊解析:從上到下一行一行解析,解析到某一元素,調(diào)用相應(yīng)的解析方法。
DOM根據(jù)XML層級結(jié)構(gòu)在內(nèi)存中分配一個(gè)樹形結(jié)構(gòu),把XML的標(biāo)簽,屬性和文本等元素都封裝成樹的節(jié)點(diǎn)對象。

不同的公司和組織提供了針對DOM和SAX兩種方式的解析器:

  • Sun的JAXP

  • Dom4j組織的dom4j(最常用,例如hibernate)

  • JDom組織的jdom

其中的JASP是J2SE的一部分,它分別針對DOM和SAX提供了DOM和SAX解析器。

在這里也主要介紹三種解析:dom、sax和dom4j

1.2.JAXP介紹

Sun公司提供了Java API for XML Parsing(JAXP)接口來使用SAX和DOM,通過JAXP,我們可以使用任何與JAXP兼容的XML解析器。

JAXP開發(fā)包是J2SE的一部分,它由javax.xml、org.w3c.dom、org.xml.sax包及其子包組成

在javax.xml.parsers包中,定義了幾個(gè)工廠類,程序員調(diào)用這些工廠類,可以得到對xml文檔進(jìn)行解析的DOM或SAX的解析器對象。

2.JAXP之DOM解析

2.1.XML DOM節(jié)點(diǎn)樹

首先說明JAXP解析XML的DOM對象的原理,XML DOM把XML文檔視為一顆節(jié)點(diǎn)樹(node-tree),樹中的所有節(jié)點(diǎn)彼此之間都有關(guān)系。可通過這棵樹訪問所有的節(jié)點(diǎn)??梢孕薷幕蛘邉h除它們的內(nèi)容,也可以創(chuàng)建新的元素。

比如,現(xiàn)在的XML文檔如下(該例子來自w3cschool在線教程):

<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="cooking">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book category="web" cover="paperback">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
    <book category="web">
        <title lang="en">XQuery Kick Start</title>
        <author>James McGovern</author>
        <author>Per Bothner</author>
        <author>Kurt Cagle</author>
        <author>James Linn</author>
        <author>Vaidyanathan Nagarajan</author>
        <year>2003</year>
        <price>49.99</price>
    </book></bookstore>

這棵樹從根節(jié)點(diǎn)開始,在樹的最低層級向文本節(jié)點(diǎn)長出枝條:

XML解析中DOM的示例分析

【要知道的幾個(gè)知識點(diǎn)】:
1.dom會把xml文件看做一棵樹,并加載到內(nèi)存
2.dom特別適合做crud操作
3.dom不太適合去操作比較大的xml文件(占用內(nèi)存)
4.dom會把xml文件中每一個(gè)元素、屬性、文本都映射成對應(yīng)的Node對象。

2.2.獲得JAXP中的DOM解析器步驟

1.調(diào)用DocumentBuilderFactory.newInstance()方法得到創(chuàng)建DOM解析器的工廠
2.調(diào)用工廠對象的newDocumentBuilder方法得到DOM解析器對象
3.調(diào)用DOM解析器對象的parse()方法解析XML文檔,得到代表整個(gè)文檔的Document對象,進(jìn)行可以利用DOM特性對整個(gè)XML文檔進(jìn)行操作了。

2.3.JAXP之DOM解析實(shí)例:

XML文檔如下:

<?xml version="1.0" encoding="utf-8"?><班級>
    <學(xué)生 地址="香港">
        <名字>周小星</名字>    
        <年齡>23</年齡>
        <介紹>學(xué)習(xí)刻苦</介紹>
    </學(xué)生>   
    <學(xué)生 地址="澳門">
        <名字>林曉</名字> 
        <年齡>25</年齡>
        <介紹>是一個(gè)好學(xué)生</介紹>
    </學(xué)生>   </班級>

2.3.1.讀取XML文檔

首先使用2.2中介紹了三個(gè)步驟得到代表整個(gè)文檔的document對象,并調(diào)用我們所寫的read(Document document)方法,如下:

// 1.創(chuàng)建一個(gè)DocumentBuilderFactoryDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.通過工廠實(shí)例得到DocumentBuilder對象DocumentBuilder builder = factory.newDocumentBuilder();
// 3.指定要解析的xml文件,返回document對象Document document = builder.parse(new File("src/myClass.xml"));
read(document);

其中的read方法是這么寫的:

/**
* 顯示所有學(xué)生的所有信息
 * @param document
 */public static void read(Document document){    // 通過學(xué)生這個(gè)標(biāo)簽名字得到NodeList
    NodeList nodeList = document.getElementsByTagName("學(xué)生");    
    for(int i=0;i<nodeList.getLength();i++){        // 因?yàn)镋lement是Node的子接口,所有這里可以轉(zhuǎn)換成Element
        // 從而可以使用更多的方法
        Element student = (Element)nodeList.item(i);        // 獲取屬性
        String address = student.getAttribute("地址");
        System.out.println(address);        // 得到學(xué)生的所有子節(jié)點(diǎn),并循環(huán)輸出
        NodeList childList = student.getChildNodes();        for(int j=0;j<childList.getLength();j++){
            Node node = childList.item(j);            if(node.getNodeType() == Node.ELEMENT_NODE)
                System.out.println(node.getNodeName()+":"+node.getTextContent());
        }
        System.out.println("-------------");
    }    // 這樣一層一層向下查詢也可以
    //Element name = (Element)student.getElementsByTagName("名字").item(0);
    //System.out.println(name.getTextContent());        }

最后的運(yùn)行結(jié)果如下所示:

XML解析中DOM的示例分析

2.3.2.更新XML文檔

利用DOM更新XML文檔一定要使用Transformer類將更改寫入文件,否則只是更改了在內(nèi)存中的XML文檔對象。

  • javax.xml.transform包中的Transformer類用于把代表XML文件的Document對象轉(zhuǎn)換為某種格式后進(jìn)行輸出,例如把xml文件應(yīng)用樣式表后轉(zhuǎn)成一個(gè)html文檔。利用這個(gè)對象,當(dāng)然也可以把Document對象又重新寫回到一個(gè)XML文件中

  • Transformer類通過transform方法完成轉(zhuǎn)換操作,該方法接收一個(gè)源和一個(gè)目的地。我們可以通過:

javax.xml.transform.dom.DOMSource類來關(guān)聯(lián)要轉(zhuǎn)換的document對象
 用javax.xml.transform.stream.StreamResult對象來表示數(shù)據(jù)的目的地

  • Transformer對象通過TransformerFactory獲得

【1】添加元素
我們可以向上述XML中添加一個(gè)學(xué)生子節(jié)點(diǎn),如下:

/**
 * 添加學(xué)生
 * 
 * @param document
 * @throws Exception
 */public static void add(Document document) throws Exception {    // 創(chuàng)建一個(gè)新的學(xué)生節(jié)點(diǎn)
    Element newStudent = document.createElement("學(xué)生");    // 給新的學(xué)生添加地址屬性
    newStudent.setAttribute("地址", "舊金山");    // 創(chuàng)建學(xué)生的子節(jié)點(diǎn)
    Element newStudent_name = document.createElement("名字");
    newStudent_name.setTextContent("小明");
    Element newStudent_age = document.createElement("年齡");
    newStudent_age.setTextContent("25");
    Element newStudent_intro = document.createElement("介紹");
    newStudent_intro.setTextContent("這是一個(gè)好孩子");    // 將子節(jié)點(diǎn)添加到學(xué)生節(jié)點(diǎn)上
    newStudent.appendChild(newStudent_name);
    newStudent.appendChild(newStudent_age);
    newStudent.appendChild(newStudent_intro);    // 把新的學(xué)生節(jié)點(diǎn)添加到根節(jié)點(diǎn)下
    document.getDocumentElement().appendChild(newStudent);    // 更新XML文檔
    // 得到TransformerFactory
    TransformerFactory tff = TransformerFactory.newInstance();    // 通過TransformerFactory得到一個(gè)轉(zhuǎn)換器
    Transformer tf = tff.newTransformer();    // 更新當(dāng)前的XML文件
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

【2】刪除元素
同樣的,我們也可以刪除一個(gè)學(xué)生節(jié)點(diǎn),如下:

/**
* 刪除第一個(gè)學(xué)生節(jié)點(diǎn)
 * 
 * @param document
 */public static void delete(Document document) throws Exception {    // 首先找到這個(gè)學(xué)生,這里可以不用轉(zhuǎn)為Element
    Node student = document.getElementsByTagName("學(xué)生").item(0);    // 通過它的父節(jié)點(diǎn)來刪除
    student.getParentNode().removeChild(student);    // 更新這個(gè)文檔
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

【3】更改元素的值
比如,我們也可以將第一個(gè)學(xué)生的名字改為松江,如下:

/**
* 把第一個(gè)學(xué)生的元素名字改為宋江
 * 
 * @param document
 */public static void update_name(Document document) throws Exception{
    Element student = (Element) document.getElementsByTagName("學(xué)生").item(0);
    Element name = (Element) student.getElementsByTagName("名字").item(0);
    name.setTextContent("宋江");    // 更新這個(gè)文檔
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

【4】更改或刪除元素的屬性

/**
* 刪除第一個(gè)學(xué)生節(jié)點(diǎn)的屬性
 * 
 * @param document
 */public static void delete_attribute(Document document) throws Exception {    // 首先找到這個(gè)學(xué)生
    Element student = (Element) document.getElementsByTagName("學(xué)生").item(0);    // 刪除student的地址屬性
    student.removeAttribute("地址");    // 更新屬性
    // student.setAttribute("地址", "新地址");

    // 更新這個(gè)文檔
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(            "src/myClass.xml")));
}

上述列舉了幾個(gè)更新元素(節(jié)點(diǎn))的例子,更一般的需求是這樣的:將名字是周小星的同學(xué)的年齡改為30,這時(shí)候我們需要去遍歷XML文檔,找到對應(yīng)的節(jié)點(diǎn),再進(jìn)行修改。

另外,所有關(guān)于更新的方法中都用到了TransformerFactory來進(jìn)行實(shí)際的更新,所以,我們可以把這三句話寫成一個(gè)函數(shù),從而避免代碼冗余,如下:

public static void update(Document document, String path) throws Exception {
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    tf.transform(new DOMSource(document), new StreamResult(new File(path)));
}

關(guān)于“XML解析中DOM的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI