0

嗨,我正在制作自己的 ToDo 程序,我需要为用户添加创建 ToDo 项目的功能。当他们这样做时,我需要能够在列表文件中添加 XML 元素/部分。

我的 XML 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<list>
<item>
    <name>Item 1</name>
    <due>Tomorrow</due>
</item>
<item>
    <name>Item 2</name>
    <due>Thursday</due>
</item>
</list>

假设用户创建了一个名称为“论文”且截止日期为“明天”的项目,我需要能够制作另一个类似上面的列表元素并将其插入到</list>标签之前。

基本上我在问如何在特定位置(在</list>标记之前的末尾)写入我的 XML 文件?是否有可能只是转到文件的末尾并返回一行?

4

3 回答 3

1

是否有可能只是转到文件的末尾并返回一行?

当然可以,但是这样做会非常不安全。它假设 XML 文件的编写方式,这也是同样有效的 XML:

<?xml version="1.0" encoding="utf-8"?>
<list><item><name>Item 1</name><due>Tomorrow</due></item><item><name>Item 2</name><due>Thursday</due></item></list>

现在它会变得有点复杂。相反,您应该使用 XML 解析器,解析 XML 文件,操作 XML 的文档对象模型 (DOM),然后将其保存回来。你可以这样做:

Dim document As XDocument = XDocument.Load("pathtoxmlfile.xml")
Dim root = document.Root
root.Add(
    New XElement("item",
                 New XElement("name", "Item 3"),
                 New XElement("due", "Friday"))
             )
document.Save("pathtoxmlfile.xml")

这利用了框架的XDocument类,这是一个很好的工具,可以轻松使用 XML 文件的对象模型。

如何选择和删除特定节点?

您可以使用LINQ-to-XML编写删除查询。只需编写一个 LINQ 查询来选择您想要的元素,然后使用Remove(). 这是一个删除我们刚刚添加的项目的示例:

Dim document As XDocument = XDocument.Load("pathtoxmlfile.xml")
Dim root = document.Root
Dim deleteThese = From e In root.Elements("item") Where e.Element("name").Value = "Item 3"
If deleteThese.Any() Then
    deleteThese.Remove()
    document.Save("pathtoxmlfile.xml")
End If
于 2012-05-07T13:19:34.150 回答
0

可以在文件中的特定位置写入,但不能插入数据,您将覆盖文件的其余部分。此外,该位置不是一行,甚至不是一个字符,而是一个字节位置。由于 UTF-8 可以为某些字符使用多个字节,因此找到一个字符的字节位置并非易事。

只需将文件加载到XmlDocument对象中,添加元素,然后将文档写入文件。

于 2012-05-07T13:14:15.003 回答
0

不,您不会自己编写 XML 文件。您将使用XmlDocument该类创建一个 DOM 结构,您可以使用相应的类轻松地读取或写入 XML 文件XmlWriter

或者,您可以使用类型化数据集,该数据集可以写入带有或不带有模式的 XML 文件。

当框架中有类为您做事时,您绝对不应该手动编写 XML 文件

于 2012-05-07T13:14:22.177 回答