VB.NET写入某个文件(实质上是创建一个新的XML元素)

时间:2012-05-07 13:10:11

标签: xml vb.net filesystems streamwriter writer

您好我正在制作自己的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>

假设用户创建了一个名为'papers'且截止日期为'Tomorrow'的项目,我需要能够创建上面的另一个列表元素并将其插入</list>标记之前。

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

3 个答案:

答案 0 :(得分: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")

这使用了Framework的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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

或者,您可以使用类型化数据集,可以使用或不使用模式将其写入XML文件。

当框架中的类为您做事时,您是否应该手动编写XML文件?