如何用DOM生成和修改XML文件

我们一般都知道如何用DOM去读取XML文件的内容, DOM读取XML文件的时候会把整个XML文件映射到一棵内存树,如果通过DOM API中修改了这棵XML内存树,并不会反映到原XML文件,我们要想把修改或运行期间创建的XML内容保存到磁盘系统,可以用Transformer来实现。下面代码演示了该如何编程

public class DOMTester {
    public static void main(String[] args) {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            updateDocument(db);//修改XML文档
            newDocument(db);//创建新XML文档
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void updateDocument(DocumentBuilder db) throws SAXException, IOException {
        Document doc = db.parse(DOMTester.class.getResourceAsStream("test.xml"));
        Element root = doc.getDocumentElement();
        root.setAttribute("name","chinajash");
        Element catalog3 = doc.createElement("catalog");
        catalog3.setAttribute("id","003");
        catalog3.setTextContent("Music");
        root.appendChild(catalog3);
        writeXML(doc, "test.xml");
    }

    private static void newDocument(DocumentBuilder db) throws SAXException, IOException {
        Document doc = db.newDocument();
        Element root = doc.createElement("root");
        doc.appendChild(root);
        root.appendChild(doc.createElement("new"));
        writeXML(doc, "new.xml");
    }

    private static void writeXML(Document doc, String file) {
        try {
            Transformer t = TransformerFactory.newInstance().newTransformer();
            t.setOutputProperty("indent", "yes");
            t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(file)));
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();  
        }
    }
}

原test.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<catalogs>
    <catalog id="001">Book</catalog>
    <catalog id="002">Video</catalog>
</catalogs>

上面程序修改了这个文件,运行后生成新的test.xml内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<catalogs name="chinajash">
    <catalog id="001">Book</catalog>
    <catalog id="002">Video</catalog>
    <catalog id="003">Music</catalog>
</catalogs>
 

上面程序运行后新产生的new.xml内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<root>
    <new />
</root>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值