XML : 在特定节点之间添加节点

Posted

技术标签:

【中文标题】XML : 在特定节点之间添加节点【英文标题】:XML : Add Nodes in between the specific Node 【发布时间】:2016-11-29 08:51:38 【问题描述】:

这是我的 xml 文档:

<FolderSettings>
<quantity>0</quantity>
<FolderList>
   <Folder>
    <FolderName>E:\05.09.2016</FolderName>
    <Checked>true</Checked>
  </Folder>

  <Folder>
    <FolderName>E:\100CANON</FolderName>
    <Checked>true</Checked>
  </Folder>

  <Folder>
    <FolderName>G:\Sony</FolderName>
    <Checked>true</Checked>
  </Folder>

</FolderList>

我想将带有 2 个注释的文件夹节点添加到 FolderList 节点中。

<Folder>
   <FolderName>E:\Nikon</FolderName>
    <Checked>true</Checked>
  </Folder>

每次我选择/添加一个文件夹时,哪个文件夹会作为节点添加到 FolderList 中?

我该怎么做?我尝试了一些几乎失败的方法。

这是我在 FolderList 节点中添加注释的代码

        Dim xmlFile = XDocument.Load(PXmlFileName)
        Dim element = <Folder>
                          <FolderName><%= _folderPath$ %></FolderName>
                          <Checked><%= "true" %></Checked>
                      </Folder>
        Dim parent = xmlFile...<FolderList>.FirstOrDefault()
        parent.Add(element)
        xmlFile.Save(PXmlFileName)

谢谢

Public Function UpdateFolderListsIntoXML(_folderPath$) As Boolean
    Dim _xdoc As New XDocument()
    Try
    'Loading: 
        _xdoc = XDocument.Load(PXmlFileName)
        Dim _lamIsElementExists = Function(_elementName$)
                                      Dim _folderlistElement As XElement
                                      Try
                                          _folderlistElement = _xdoc.Root.Element(_elementName$)
                                          If Not IsNothing(_folderlistElement) Then
                                              Return True
                                          Else
                                              Return False
                                          End If
                                      Catch ex As Exception
                                          Return False
                                      Finally
                                          _folderlistElement = Nothing
                                      End Try
                                  End Function
        If _lamIsElementExists("FolderList") = False Then
            'create FolderList element
            _xdoc.Root.Element("FolderSettings").Add(<FolderList>
                                                     </FolderList>)
            _xdoc.Save(PXmlFileName)
            'After Create "FolderList" Element loading xml file again
            _xdoc = XDocument.Load(PXmlFileName)
        End If
        'Add New Path into FolderList Element
        Dim element = <Folder>
                          <FolderName><%= _folderPath$ %></FolderName>
                          <Checked><%= "true" %></Checked>
                      </Folder>
        Dim parent = _xdoc...<FolderList>.FirstOrDefault()
        parent.Add(element)
        _xdoc.Save(PXmlFileName)
        Return True
    Catch ex As Exception
        PeX = ex
        Return False
    Finally
        _xdoc = Nothing
    End Try
End Function

这对我来说很好......我感谢任何建议谢谢

【问题讨论】:

展示你的尝试 element = Dim parent = xmlFile ....FirstOrDefault() parent.Add(element) xmlFile.Save(PXmlFileName) 请使用您使用的代码编辑您的问题,这样可以使其更具可读性。同样从您的评论来看,您可以找到需要插入的元素并使用AddBeforeSelf 您的代码对我有用。你到底是什么问题? omg :O ... 非常感谢.. 请将 FolderList 节点删除到 xml 文档中,然后请尝试 【参考方案1】:

我建议你使用 Append 而不是 Add.. 就像我在网上找到的这个例子一样:

' create new instance of XmlDocument
Dim doc As New XmlDocument()

' load from file 
doc.Load(filename)

' create node and add value 
Dim node As XmlNode = doc.CreateNode(XmlNodeType.Element, "FolderList", Nothing)
'node.InnerText = "this is new node";

' create title node 
Dim nodeTitle As XmlNode = doc.CreateElement("FolderName")
'add value for it
nodeTitle.InnerText = "G:\Sony"

' create Url node 
Dim nodeUrl As XmlNode = doc.CreateElement("Checked")
nodeUrl.InnerText = "True"

' add to parent node 
node.AppendChild(nodeTitle)
node.AppendChild(nodeUrl)

' add to elements collection 
doc.DocumentElement.AppendChild(node)

' save back 
doc.Save(filename)

【讨论】:

请提供错误信息或不工作的部分代码! 您的代码会创建重复的 FolderList 元素,然后存储附加值我想每次都将 Folder 元素添加到 FolderList 元素中 此代码只是一个示例,您必须根据需要进行编辑。这里设置父节点Dim node As XmlNode 感谢您的提示最后我将代码更改为正常工作但未优化我现在更新了我的问题 不客气!如果我帮助了你,请点击我答案左侧“上下投票”下方的绿色对勾! ;)

以上是关于XML : 在特定节点之间添加节点的主要内容,如果未能解决你的问题,请参考以下文章

使用php替换xml中的特定节点值

将节点添加到 XML 树的更深的分支中

c# 在xml 跟节点下添加子节点

XML 从数组中搜索节点并将新数据添加到新节点

如何向xml中添加新节点

保存前向 XML 添加节点