VB.NET:使用 XDocument 在 XML 文件中添加/编辑/删除 XElement

Posted

技术标签:

【中文标题】VB.NET:使用 XDocument 在 XML 文件中添加/编辑/删除 XElement【英文标题】:VB.NET : Add/Edit/Delete an XElement inside XML file with XDocument 【发布时间】:2022-01-18 01:15:02 【问题描述】:

我必须制作一个应用程序,我可以在其中访问 XML 文件中的元素,然后 add-modify-delete 其中一些并在 XML 中更新这些元素。我设法使用 XML 文件中的 XDocument 加载元素,但是我很难理解如何使用 XDocument 保存对 XML 文件的更改。

myfile.xml

<root>
   <functions>
      <function name="foo">
         <description> "foofoofoo" </description>
      </function>
      <function name="bar">
         <description> "barbarbar" </description>
      </function>
   </functions>
...
</root>

到目前为止,这是我一直在尝试使用 XDocument 的方法,但它实际上并没有保存任何内容。

app.vd 用于添加元素

...
xml = XDocument.Load(pathToXmlFile)
functions = From f In xml.Descendants("functions") Select f

functions.Append(New XElement("function", 
                              New XAttribute("name", newName), 
                              New XElement("description", newDescription)))
xml.Save(pathToXmlFile)
...

提前感谢您的帮助!

【问题讨论】:

在我看来functions 仍然是一个选定的序列。您可能需要使用functions.Single 来获取函数节点,然后您就可以附加到该节点。你有Option Strict On吗? 我会使用:xml.Descendants("functions").FirstOrDefault().Add(New XElement("function", New XAttribute("name", newName), New XElement("description" , 新描述))); 【参考方案1】:

您可以使用 XmlSerialization 将对象放入具体的类中并修改和写回,非常简单

Imports System.IO
Imports System.Xml.Serialization

Xml 模型

<XmlRoot("root")>
Partial Public Class Root
    <XmlArrayItem("function")>
    Public Property functions() As List(Of [Function])
End Class

Partial Public Class [Function]
    <XmlElement("description")>
    Public Property Description() As String
    <XmlAttribute("name")>
    Public Property Name() As String
End Class

读取、修改、写入

Dim xml As Root
Dim serializer As New XmlSerializer(GetType(Root))

' read
Using sr As New StreamReader("myfile.xml")
    xml = DirectCast(serializer.Deserialize(sr), Root)
End Using

' modify
xml.functions.Add(
    New [Function]() With 
        .Name = "newName",
        .Description = "newDescription")

' write
Using sw As New StreamWriter("myfile.xml")
    serializer.Serialize(sw, xml)
End Using

【讨论】:

以上是关于VB.NET:使用 XDocument 在 XML 文件中添加/编辑/删除 XElement的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XDocument 添加 xml 前缀?

在 C# 中使用 XDocument 创建 XML 文件

在 vb .net 中使用名称空间前缀解析 XML

使用 XDocument 和 Linq 读取 XML - 检查元素是不是为 NULL?

有没有办法在不使用 XDocument 的情况下将新的 xml 数据附加到 xml 文件中的现有 xml?

如何防止XDocument添加XML版本和编码信息