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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 在Java中修改XML文件

在Java中修改XML文件

更新時間:2021-12-06 09:16:00 來源:動力節點 瀏覽3074次

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 解析器來修改以下 XML 數據。

對于員工 ID 1001

刪除 XML 元素name。

對于 XML 元素role,將值更新為“創始人”。

對于員工 ID 1002

將 XML 屬性更新為2222.

添加一個新的 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/

通過上述介紹相信大家對在Java中修改XML文件的方法已經有所了解,大家如果想了解更多相關知識,可以關注一下動力節點的Java視頻,里面的課程內容詳細,由淺到深,通俗易懂,適合小白觀看學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本三级香港三级人妇三级 | 国产欧美网站 | 亚洲七七久久精品中文国产 | 成人深夜福利视频 | 动漫美女胸被狂揉扒开吃奶动态图 | 午夜看一级特黄a大片 | 午夜爽爽爽男女免费观看影院 | 放荡的美妇一区二区三区 | 麻豆国产 | 亚洲毛片在线播放 | 欧美一区二区在线视频 | 国产专区在线 | 最近中文字幕免费国语 | 深夜国产成人福利在线观看女同 | 日本视频一区二区 | 国产日韩欧美在线观看不卡 | 爱搞视频首页在线 | 欧美综合亚洲图片综合区 | 最近更新2019中文字幕国语 | 中文字幕一区二区三区精品 | 久久女同互慰一区二区三区 | 日本精品一区二区三区在线观看 | 一级毛片不卡片免费观看 | 午夜草草| www.黄色片| 欧美亚洲国产另类 | 一本大道香蕉高清久久 | 天天舔天天射天天操 | 亚洲国产成人综合 | www.激情网.com | 网站在线观看 | 在线观看中文字幕 | 视频一区中文字幕 | 亚洲欧洲中文 | 午夜精品网站 | 亚洲欧美综合一区二区三区四区 | 91抖音成人| 日韩在线观看内窥镜 | 91精品国产肉丝高跟在线 | 中文字幕日本在线视频二区 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 |