如何使用Java向现有的XML文件中写入内容

4
我有一个长这样的XML文件。employees.xml
<Employees>
    <Employee>
        <FirstName>myFirstName</FirstName>
        <LastName>myLastName</LastName>
        <Salary>10000</Salary>
    <Employee>
</Employees>

现在,我该如何将新的员工元素添加到现有的XML文件中呢?.. 如果有示例代码会更好。

2
读取文件,在内存中进行修改,将完整的文件重新写出。你没有陷入使用平面文件作为数据库的陷阱吧? - Thorbjørn Ravn Andersen
1
@Thorbjørn Ravn Andersen - XML并不是一个真正的平面文件格式。 - Don Roby
1
@DonRoby 真的吗?那么它是什么(在这种情况下,它是存储在文件中的)? - Thorbjørn Ravn Andersen
1
@Thorbjørn Ravn Andersen - 请参阅http://en.wikipedia.org/wiki/Flat_file_database以获取平面文件数据库的相关信息... XML不是这样的,而是分层结构化数据。虽然它通常存储在文件中,但它们并不是平面的。 - Don Roby
1
@DonRoby请重新查看示例XML,并考虑是否例如</FirstName><LastName>不能被视为合适的分隔符(对于其余字段使用类似的分隔符),因此这种特定的XML方言(而不是XML总体)是一个平面文件。 - Thorbjørn Ravn Andersen
http://thegreenoak.blogspot.com/2012/07/writing-string-value-to-xml-file-using.html - djangofan
5个回答

6

你不能“在现有的XML文件中写入节点”。你可以将现有的XML文件读入内存,添加到数据模型中,然后写入一个新文件。你可以将旧文件重命名,并将新文件写入旧名称下。但是没有常用的Java工具可以直接修改XML文件。


2
请使用xstream将您的文件解析为对象,或创建一个员工列表,然后直接将其转换为XML。

哇,那真是快。我能够将数据写入现有的 XML 文件吗?我的意思是为现有的 XML 文件添加新节点。 - Aruna Karunarathna

2
要向现有的XML文件添加内容,通常需要将其读入内部数据结构中,以内部形式添加所需的数据,然后再次将其全部写出,覆盖原始文件。
内部结构可以是DOM或您自己创建的结构,而且有多种读入和写出的方法。
如果数据相对较小,则DOM可能是最简单的方法,而在this related question的答案中有一些示例代码。
如果数据很大,则DOM将无法胜任。 可能的方法是使用SAX进行读取和写入(尽管SAX传统上只是一种读取机制),如another related question中的答案所述。
您还可以考虑使用JAXB或(甚至更好)StAX

非常感谢您提供的信息丰富的答案。是的,数据会有点大。 - Aruna Karunarathna
Stax链接似乎已经失效。 - svarog

2

我认为这个链接对您很有用。

这里有示例,说明如何读取/解析、修改(添加元素)和保存(再次写入xml文件)。

以下示例可在此找到:http://www.petefreitag.com/item/445.cfm

读取:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse("/path/to/file.xml");

修改:

// attributes
Node earth = doc.getFirstChild();
NamedNodeMap earthAttributes = earth.getAttributes();
Attr galaxy = doc.createAttribute("galaxy");
galaxy.setValue("milky way");
earthAttributes.setNamedItem(galaxy);

// nodes
Node canada = doc.createElement("country");
canada.setTextContent("ca");
earth.appendChild(canada);

编写XML文件:

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

//initialize StreamResult with File object to save to file
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);

String xmlString = result.getWriter().toString();
System.out.println(xmlString);

1

您需要使用DOM来编写/编辑您的XML文件。
这很容易:
您只需要创建节点并向其添加属性即可。
您还可以使用DOM编写/编辑XSLT文件。
只需在Google上搜索DOM java即可。


谢谢,伙计。是的,我尝试过使用DOM。但我遇到的问题是无法将新节点写入现有的XML文件中。 - Aruna Karunarathna
1
相反,这很容易,你只需要解析它,然后搜索你需要添加新节点的节点,然后将所需的节点添加到其中。 - GingerHead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接