当前位置 : 主页 > 网页制作 > xml >

在visual basic中将数据添加到xml文件的节点

来源:互联网 收集:自由互联 发布时间:2021-06-13
我是Visual Basic的新手,所以我想从一开始就原谅自己. 下面的代码应该得到一个节点列表,其中包含Name的InnerText等于名为membername的String的所有节点.这部分似乎工作得很好,但之后我还要检
我是Visual Basic的新手,所以我想从一开始就原谅自己.

下面的代码应该得到一个节点列表,其中包含Name的InnerText等于名为membername的String的所有节点.这部分似乎工作得很好,但之后我还要检查在这个列表中是否存在一个节点Logout.这样我想防止重复xml数据库中的数据.不幸的是,它不像我尝试的那样工作.它不断复制所有数据.那我的错是什么?

XML文件

<?xml version="1.0" encoding="utf-16"?>
<Times>
  <Shift>
    <Name>Philipp</Name>
    <Login>14:11</Login>
    <Date>25.03.2013</Date>
    <Logout>14:11</Logout> ' Don't generate again ....
  </Shift>
  <Shift>
    <Name>Philipp</Name>
    <Login>14:11</Login>
    <Date>25.03.2013</Date>
    <Logout>14:11</Logout> ' Generate Logout node
  </Shift>
</Times>

VISUAL BASIC CODE

If File.Exists(Filename) Then

        DOMDocument.Load(Filename)

        Dim RootElement As XmlElement = DOMDocument.DocumentElement
        Dim ListOfTitles As XmlNodeList = DOMDocument.GetElementsByTagName("Name")

        For Each Node As XmlNode In ListOfTitles

            If Node.InnerText = memberName Then

                Dim logout = Node.SelectNodes("Logout")

                If Not logout Is Nothing Then

                    Dim NewElement As XmlElement = DOMDocument.CreateElement("Logout")
                    NewElement.InnerText = DateTime.Now.ToShortTimeString()

                    Dim Parent As XmlNode = Node.ParentNode
                    Parent.AppendChild(NewElement)

                    DOMDocument.Save(Filename)

                End If

            End If

        Next
    End If
让我们试着解释什么是错的以及如何解决它.

显然,对于每个< Name>节点,您希望检索< Logout>节点.与之关联的节点(如果存在),并尝试使用Node.SelectNodes(“Logout”)执行此操作,但是:

代码Node.SelectNodes(“Logout”)实际上尝试选择< Name>的子节点.您的Node变量表示的节点 – 在XML标记中,

><名称>节点没有子节点
><退出>节点总是他们的兄弟姐妹,而不是孩子.

所以它总是返回一个空集合,而不是你想要的节点.

您可以通过迭代< Shift>来解决此问题.节点,因为它们包含Name和Logout信息作为子节点.

顺便说一句,InnerText不是IXMLDOMNode属性,请尝试使用Text

If File.Exists(Filename) Then

    DOMDocument.Load(Filename)

    Dim RootElement As XmlElement = DOMDocument.DocumentElement
    Dim ListOfShifts As XmlNodeList = DOMDocument.GetElementsByTagName("Shift")

    For Each ShiftNode As XmlNode In ListOfShifts

        Dim NameNode = ShiftNode.SelectSingleNode("Name")
        If NameNode IsNot Nothing And NameNode.Text = memberName Then

            Dim logoutNode = ShiftNode.SelectSingleNode("Logout")

            If Not logoutNode Is Nothing Then

                Dim NewElement As XmlElement = DOMDocument.CreateElement("Logout")
                NewElement.Text = DateTime.Now.ToShortTimeString()

                Dim Parent As XmlNode = Node.ParentNode
                Parent.AppendChild(NewElement)

                DOMDocument.Save(Filename)

            End If

        End If

    Next
End If

此外,您将在每次更改时保存文档 – 为什么不在循环完成后仅保存一次

网友评论