大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

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

在Java中修改XML文件

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

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視頻,里面的課程內容詳細,由淺到深,通俗易懂,適合小白觀看學習,希望對大家能夠有所幫助。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 99热这里只有精品5 99热这里只有精品66 | 久久天堂在线 | 国产精品久久久久久久小唯西川 | 中文字幕不卡在线观看 | 国产精品成人扳一级aa毛片 | 亚洲狠狠婷婷综合久久久久 | 精彩视频一区二区 | 久操国产视频 | 日本中文字幕不卡免费视频 | 色综合网址 | 色综合久久98天天综合 | 欧洲黄色网 | 欧美黄色网页 | 99视频精品国在线视频艾草 | 亚洲精品中文字幕乱码一区二区 | 欧美成人久久久免费播放 | 在线国产一区二区 | 色片在线免费观看 | 精品一久久| 手机看片国产免费 | 第一色区| 美女个护士一级毛片亚洲 | 天天操天天玩 | 久久精品国产亚洲香蕉 | 婷婷综合激情网 | 四虎网站1515hh四虎免费 | 亚洲激情网站 | 日日操天天 | 欧美大尺度 边吃奶边做 | 99免费在线视频 | 99热这里只有精品久久免费 | 老司机精品视频个人在观看 | 伊人久久视频 | 曰批免费视频播放在线看片 | 久久综合99re88久久爱 | 久久99精品久久久久久久野外 | 日韩欧美国产高清在线观看 | 国产精品嫩草影院99av视频 | 国产精品成人在线播放 | 亚洲国产成人麻豆精品 | 国产福利网站 |