您好我正在制作自己的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文件?是否有可能只是到文件的末尾并返回一行?
答案 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文件?