【问题标题】:vb.net xml second run of code does not repeat the same resultsvb.net xml第二次运行代码不重复同样的结果
【发布时间】:2020-07-10 13:54:16
【问题描述】:

这是我的代码:

    Dim xmlDoc As XmlDocument = New XmlDocument
    Dim parNode As Xml.XmlNode
    Dim newChild As Xml.XmlNode

    xmlDoc.Load(TSProjectProjectLocation.ToString)
    Dim elemList As XmlNodeList = xmlDoc.GetElementsByTagName("Synopsis")
    Dim i As Integer = elemList.Count

    parNode = xmlDoc.SelectSingleNode("/S2SProject/Synopsi")
    newChild = xmlDoc.CreateNode(Xml.XmlNodeType.Element, "Synopsis", "")
    parNode.AppendChild(newChild)

    Dim id As XmlElement = xmlDoc.SelectSingleNode("/S2SProject/Synopsi/Synopsis")

    id.SetAttribute("SynopsisID", i)
    id.SetAttribute("SynopsisName", NewSynopsisName)
    id.SetAttribute("SynopsisDateCreated", Now())
    id.SetAttribute("SynopsisDateModified", Now())
    id.SetAttribute("SynopsisRTF", "Synopsis : " & NewSynopsisName)

    parNode.AppendChild(newChild)

    xmlDoc.Save(TSProjectProjectLocation.ToString)

这给了我所需的结果:

<Synopsi>
  <Synopsis SynopsisID="0" SynopsisName="TEST 1" SynopsisDateCreated="10/07/2020 15:43:29" SynopsisDateModified="10/07/2020 15:43:29" SynopsisRTF="Synopsis : TEST 1" />
</Synopsi>

当我第二次运行代码时,我希望看到:

  <Synopsi>      
    <Synopsis SynopsisID="0" SynopsisName="TEST 1" SynopsisDateCreated="10/07/2020 15:43:29" SynopsisDateModified="10/07/2020 15:43:29" SynopsisRTF="Synopsis : TEST 1" />
    <Synposis SynopisID="1"...
  </Synopsi>

但我得到的是:

<Synopsi>
  <Synopsis SynopsisID="1" SynopsisName="test 2" SynopsisDateCreated="10/07/2020 15:46:41" SynopsisDateModified="10/07/2020 15:46:41" SynopsisRTF="Synopsis : test 2" />
<Synopsis />
</Synopsi>

为什么我的代码重写了第一个概要?为什么它会用结束标签做这么有趣的事情?

【问题讨论】:

  • 我认为这是因为您总是选择第一个节点而不是使用刚刚附加的节点(newChild)。 Dim id As XmlElement = xmlDoc.SelectSingleNode("/S2SProject/Synopsis/Synopsis")

标签: xml vb.net


【解决方案1】:

我喜欢构建孩子然后添加它们,我发现它更清楚正在发生的事情:

Dim xmlDoc As XmlDocument = New XmlDocument
Dim parNode As Xml.XmlNode
Dim newChild As Xml.XmlElement

xmlDoc.Load(TSProjectProjectLocation.ToString)
Dim elemList As XmlNodeList = xmlDoc.GetElementsByTagName("Synopsis")
Dim i As Integer = elemList.Count

newChild = CType(xmlDoc.CreateNode(Xml.XmlNodeType.Element, "Synopsis", ""), XmlElement)        
newChild.SetAttribute("SynopsisID", i)
newChild.SetAttribute("SynopsisName", NewSynopsisName)
newChild.SetAttribute("SynopsisDateCreated", Now())
newChild.SetAttribute("SynopsisDateModified", Now())
newChild.SetAttribute("SynopsisRTF", "Synopsis : " & NewSynopsisName)

parNode = xmlDoc.SelectSingleNode("/S2SProject/Synopsi")
parNode.AppendChild(newChild)

xmlDoc.Save(TSProjectProjectLocation.ToString)

感谢 Nikki,因为她确实指出了问题的根源在于您的“id”元素逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多