【问题标题】:Removing XML elements using LINQ使用 LINQ 删除 XML 元素
【发布时间】:2014-01-19 08:23:44
【问题描述】:

我编写了用于添加条目、编辑不同元素等的代码,但我很难找到在我的 XML 文件中删除条目的最佳方法。这并不是因为缺乏研究。理想情况下,我想将用户名传递到过程中并在 XML 文件中查询用户名,然后删除 userPc、userName 和登录日期。计划是在表单关闭时运行该程序。你能帮我写一下这个方法吗?

XML

<?xml version="1.0" encoding="utf-8"?>
<user>
  <user>
    <userPC>assetTagNumber</userPC>
    <userName>userName</userName>
    <signInDate>01/01/2014 01:00:00</signInDate>
  </user>
  <user>
    <userPC>assetTagNumber2</userPC>
    <userName>userName2</userName>
    <signInDate>01/01/2014 01:00:01</signInDate>
  </user>
</user>

这是我目前的loginClass:

Public Class loginClass

    Dim xmlCheckInFilePath As String = "\\itfs1\help_share$\ITCSToolBoxAdmin\AppAdmin\User_CheckIn\user.xml"
    Dim asset As String = Environment.MachineName
    Dim user As String = Environment.UserName
    Dim signInDate As String = DateTime.Now

    Public Sub loginToXmlFile()
        Try
            runDupeCheckQuery()
        Catch ex As Exception
            MessageBox.Show("Unable to run DupeCheckQuery in login class.", "loginClass", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub runDupeCheckQuery()
        Dim doc As XDocument = XDocument.Load(xmlCheckInFilePath)
        Dim appQuery = _
            From c In doc.<user>.<user> _
            Select c.<userName>
        For Each result In appQuery
            If result.Value = user Then
                Exit Sub
            End If
        Next
        addEntry()
    End Sub

    Private Sub addEntry()
        Dim doc As XDocument = XDocument.Load(xmlCheckInFilePath)
        Dim newEntry As XElement = _
        <user>
            <userPC><%= asset %></userPC>
            <userName><%= user %></userName>
            <signInDate><%= signInDate %></signInDate>
        </user>
        doc.Root.Add(newEntry)
        doc.Save(xmlCheckInFilePath)
    End Sub

    Public Sub removeEntry()

    End Sub

End Class

【问题讨论】:

  • 我们可以帮助您编写方法,但您必须先展示您自己能够编写的内容。
  • 当然。我将添加登录类。
  • 我已经添加了登录类。除了删除之外,我对使用 LINQ&XML 感到满意。我绝对不希望有人只为我写代码,我需要了解如何去做。

标签: xml vb.net linq


【解决方案1】:

有XNode.Remove 方法,该方法将节点从其当前父节点中删除。

我还没有测试过代码,但至少应该让你知道如何解决这个问题。

Public Sub removeEntry()

    Dim doc As XDocument = XDocument.Load(xmlCheckInFilePath)

    Dim userEntry As XElement = doc.<user>.<user>.FirstOrDefault(Function(u) u.<userName>.Value = user)

    If userEntry IsNot Nothing Then userEntry.Remove()

    doc.Save(xmlCheckInFilePath)

End Sub

【讨论】:

  • 这段代码如何知道删除与 userName 关联的其他两个元素?这不会只是删除 userName 元素并离开 userPC 吗?
  • 我看到我可以运行查询以返回其他详细信息,即 userPC 和 signInDate,然后对它们执行 .Remove() 函数。似乎是额外的步骤。
  • 它将删除 &lt;user&gt; 元素,而不是 &lt;userName&gt;。由于所有其他元素都是该元素的子元素,因此它们将被自动删除。
猜你喜欢
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多