如何用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>

我们为什么要在LabVIEW中使用XML文件?①它是许多服务器数据传输的基本格式,在网络编程中有很大的几率要使用它。②它比ini文件功能强大,它可以编写复杂逻辑关系的数据配置文件,类似一个微型的数据库文件。。。。。。 感谢微软提供了OLE技术,使得不同程序之间可以通过预先指定的接口互相调用。微软提供了MSXML2.0, 4.0 及 6.0动态链接库来支援开发人员读写XML文件。 而LabVIEW正可以通过OLE自动化接口,调用MSXML*.dll动态链接库,完成对XML文件的操作。如果你的系统没有安装MSXML*.dll,可以去网上下载并安装就可以了。论坛中有许多朋友已经使用该方式去读写EXCEL, WORD,ACCESS。 有了OLE接口是不是就能很方便的读写XML文件了呢?不是,因为其中的操作是通过引用(Reference)来完成的,使用引用并不是免费的午餐,你必须时刻提防内存泄露,如果你忘记释放它,那么你就会在任务管理器中看到:你的程序内存消耗在不断的增长。 更要命的是XML文件是以树的方式构成的,从上往下分大致有:Document, root node, node List, node,而node中又包含parent node, child node,你的程序怎么才能组织好对它的调用?想想头都大了,是不是? 还好我们还有面向对象编程,把以上的东西都归下类,发现XML文件就是由Document, node list node组成的,其他的都是根据这三个类派生出来的。那么就定义三个类,分别是CDoc, CNodeList CNode由他们负责来完成对XML文件的操作。更方便的是,对于引用(Reference)的管理也都在这三个类当中完成,这有效地减轻了程序的复杂度。 附件中的程序是用LabVIEW8.5开发的,其中包含了一份Sample.xml文件,供大家测试。 本程序是调用MSXML4.0接口来完成的,如果你系统里没有安装,那么将不能运行该程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值