黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 在Java中修改XML文件

在Java中修改XML文件

更新時(shí)間:2021-12-06 09:16:00 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3131次

1.XML文件,前后

原始 XML 文件。

<?xml version="1.0" encoding="utf-8"?>
<company>
    <staff id="1001">
        <name>mkyong</name>
        <role>support</role>
    </staff>
    <staff id="1002">
        <name>yflow</name>
        <role>admin</role>
    </staff>
</company>

稍后我們將使用 DOM 解析器來(lái)修改以下 XML 數(shù)據(jù)。

對(duì)于員工 ID 1001

刪除 XML 元素name。

對(duì)于 XML 元素role,將值更新為“創(chuàng)始人”。

對(duì)于員工 ID 1002

將 XML 屬性更新為2222.

添加一個(gè)新的 XML 元素salary,包含屬性和值。

添加新的 XML 注釋。

重命名 XML 元素,從name到n(刪除和添加)。

下面是最終修改的 XML 文件。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<company>
    <staff id="1001">
        <role>founder</role>
    </staff>
    <staff id="2222">
        <role>admin</role>
        <salary currency="USD">1000</salary>
        <!--from name to n-->
        <n>yflow</n>
    </staff>
</company>

2.Dom Parser修改XML文件

下面是 DOM 解析器示例,以獲取原始 XML 文件staff-simple.xml,修改 XML 并生成修改后的 XML 文件staff-modified.xml。

package com.mkyong.xml.dom;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.*;
public class ModifyXmlDomParser {
    private static final String FILENAME = "src/main/resources/staff-simple.xml";
    // xslt for pretty print only, no special task
    private static final String FORMAT_XSLT = "src/main/resources/xslt/staff-format.xslt";
    public static void main(String[] args) {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try (InputStream is = new FileInputStream(FILENAME)) {
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(is);
            NodeList listOfStaff = doc.getElementsByTagName("staff");
            //System.out.println(listOfStaff.getLength()); // 2
            for (int i = 0; i < listOfStaff.getLength(); i++) {
                // get first staff
                Node staff = listOfStaff.item(i);
                if (staff.getNodeType() == Node.ELEMENT_NODE) {
                    String id = staff.getAttributes().getNamedItem("id").getTextContent();
                    if ("1001".equals(id.trim())) {
                        NodeList childNodes = staff.getChildNodes();
                        for (int j = 0; j < childNodes.getLength(); j++) {
                            Node item = childNodes.item(j);
                            if (item.getNodeType() == Node.ELEMENT_NODE) {
                                if ("role".equalsIgnoreCase(item.getNodeName())) {
                                    // update xml element `role` text
                                    item.setTextContent("founder");
                                }
                                if ("name".equalsIgnoreCase(item.getNodeName())) {
                                    // remove xml element `name`
                                    staff.removeChild(item);
                                }
                            }
                        }
                        // add a new xml element, address
                        Element address = doc.createElement("address");
                        // add a new xml CDATA
                        CDATASection cdataSection =
                                doc.createCDATASection("HTML tag <code>testing</code>");
                        address.appendChild(cdataSection);
                        staff.appendChild(address);
                    }
                    if ("1002".equals(id.trim())) {
                        // update xml attribute, from 1002 to 2222
                        staff.getAttributes().getNamedItem("id").setTextContent("2222");
                        // add a new xml element, salary
                        Element salary = doc.createElement("salary");
                        salary.setAttribute("currency", "USD");
                        salary.appendChild(doc.createTextNode("1000"));
                        staff.appendChild(salary);
                        // rename a xml element from `name` to `n`
                        // sorry, no API for this, we need to remove and create
                        NodeList childNodes = staff.getChildNodes();
                        for (int j = 0; j < childNodes.getLength(); j++) {
                            Node item = childNodes.item(j);
                            if (item.getNodeType() == Node.ELEMENT_NODE) {
                                if ("name".equalsIgnoreCase(item.getNodeName())) {
                                    // Get the text of element `name`
                                    String name = item.getTextContent();
                                    // remove xml element `name`
                                    staff.removeChild(item);
                                    // add a new xml element, n
                                    Element n = doc.createElement("n");
                                    n.appendChild(doc.createTextNode(name));
                                    // add a new comment
                                    Comment comment = doc.createComment("from name to n");
                                    staff.appendChild(comment);
                                    staff.appendChild(n);
                                }
                            }
                        }
                    }
                }
            }
            // output to console
            // writeXml(doc, System.out);
            try (FileOutputStream output =
                         new FileOutputStream("c:\\test\\staff-modified.xml")) {
                writeXml(doc, output);
            }
        } catch (ParserConfigurationException | SAXException
                | IOException | TransformerException e) {
            e.printStackTrace();
        }
    }
    // write doc to output stream
    private static void writeXml(Document doc,
                                 OutputStream output)
            throws TransformerException, UnsupportedEncodingException {
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        // The default add many empty new line, not sure why?
        // https://mkyong.com/java/pretty-print-xml-with-java-dom-and-xslt/
        // Transformer transformer = transformerFactory.newTransformer();
        // add a xslt to remove the extra newlines
        Transformer transformer = transformerFactory.newTransformer(
                new StreamSource(new File(FORMAT_XSLT)));
        // pretty print
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.STANDALONE, "no");
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(output);
        transformer.transform(source, result);
    }
}

輸出 – 修改后的 XML 文件。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<company>
    <staff id="1001">
        <role>founder</role>
        <address>
            <![CDATA[HTML tag <code>testing</code>]]>
        </address>
    </staff>
    <staff id="2222">
        <role>admin</role>
        <salary currency="USD">1000</salary>
        <!--from name to n-->
        <n>yflow</n>
    </staff>
</company>

3. 下載源代碼

$ git clone https://github.com/mkyong/core-java
$ cd java-xml
$ cd src/main/java/com/mkyong/xml/dom/

通過(guò)上述介紹相信大家對(duì)在Java中修改XML文件的方法已經(jīng)有所了解,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻,里面的課程內(nèi)容詳細(xì),由淺到深,通俗易懂,適合小白觀看學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 午夜嘿嘿 | 天天操天天爱天天干 | 97精品视频在线观看 | 亚洲成在人天堂在线 | 无遮挡动漫肉在线观看高清 | 国产精品久久国产精麻豆99网站 | 成年性视频bbixx | 国产黄色片一级 | 天天影视色香欲综合网网站麻豆 | 日韩在线视频一区二区三区 | 欧美一区亚洲二区 | 久久综合九色综合97飘花 | 老司机午夜免费 | 亚洲日本中文字幕永久 | 国产一级特黄毛片 | 亚洲色图综合 | 午夜一级毛片 | 日韩理论在线播放 | 美女视频永久黄网站免费观看韩国 | 日本欧美视频在线 | 国产亚洲欧美日韩在线一区 | 欧美97久久人人模人人爽人人喊 | 天天射天天操天天 | 久久综合久久精品 | 国产在线精品一区免费香蕉 | 97免费在线观看 | 成人精品一区二区三区 | 亚洲玖玖 | 伊人天天躁夜夜躁狠狠 | 日韩高清一区二区三区不卡 | 免费xxxxx在线观看网站 | 亚洲欧美视频一级 | 成人在线色视频 | 男女羞羞视频网站免费 | 日本一区二区三区免费观看 | 日批网站在线观看 | 日日摸日日添夜夜爽97 | 夜色资源站www国产在线资源 | 中文字幕在线精品视频入口一区 | 亚洲综合在线网 | 精品400部自拍视频在线播放 |