【问题标题】:how to Update a node in xml?如何更新xml中的节点?
【发布时间】:2014-12-17 16:25:44
【问题描述】:

我想使用 xml 更新 vb.net 中的节点,但找不到合适的解决方案。

这就是我的阅读和写作能力:

  If (IO.File.Exists(Application.StartupPath & "MyXML.xml")) Then
        Dim document As XmlReader = New XmlTextReader("MyXML.xml")
        While (document.Read())
            Dim type = document.NodeType
            If (type = XmlNodeType.Element) Then
                If (document.Name = "port") Then
                    port = document.ReadInnerXml.ToString()
                End If
            End If
        End While
    Else
        Dim settings As New XmlWriterSettings()
        settings.Indent = True
        Dim XmlWrt As XmlWriter = XmlWriter.Create("MyXML.xml", settings)
        With XmlWrt
            .WriteStartDocument()
            .WriteComment("XML.")
            .WriteStartElement("Data")
            .WriteStartElement("Settings")
            .WriteStartElement("port")
            .WriteString("7008")
            .WriteEndElement()
            .WriteEndDocument()
            .Close()
        End With

    End If

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 请更具体。代码应该做什么?它应该做什么?它会生成什么(如果有)错误消息?

标签: xml vb.net


【解决方案1】:

这里是更新 XML 节点的一个小开始,请参见下面的示例。您需要根据需要进行一些调整以满足您的需求。您提供的代码仅用于读取和创建 XML 文件,而不是按照您的指示更新文件。考虑到这一点,我不确定您要查找的节点(可能是“节点”),但在我的示例中...

"YOURNODE" - 将此更改为您要查找的节点

“NEW NODES TEXT” - 将其更改为您想要的节点(文本)

Dim MyXML As New XmlDocument()
MyXML.Load(Application.StartupPath & "MyXML.xml")
Dim MyXMLNode As XmlNode = MyXML.SelectSingleNode("YOURNODE")

'If we have the node let's change the text
If MyXMLNode IsNot Nothing Then
  MyXMLNode.ChildNodes(0).InnerText = "NEW NODES TEXT"
Else
  'Do whatever 
End If 

'Save the XML now
MyXML.Save(Application.StartupPath & "MyXML.xml")

根据您的要求编辑代码

我们必须深入挖掘子节点,一旦有了它,我们就可以更改该文本...

  Dim MyXML As New XmlDocument()
    MyXML.Load(Application.StartupPath & "MyXML.xml")
    Dim MyXMLNode As XmlNode = MyXML.SelectSingleNode("Data")

    'If we have the node let's change the text
    If MyXMLNode IsNot Nothing Then
        Dim MyXMLNodes As XmlNodeList
        MyXMLNodes = MyXMLNode.ChildNodes(0).ChildNodes

        'Set the nodes text
        If MyXMLNodes IsNot Nothing Then
            MyXMLNodes.Item(0).InnerText = "NEW NODES TEXT"
        End If

        'Save the XML now
        MyXML.Save(Application.StartupPath & "MyXML.xml")

    End If

【讨论】:

  • @Danny 如果这有帮助,请标记并投票,让其他人知道解决方案是什么。
【解决方案2】:

使用 Powershell 的解决方案

假设你需要改变tag2里面的值,也就是tag1里面的:

1) 使用 .ps1 扩展名保存以下代码,例如 example.ps1

$xml = [xml](Get-Content .\inputfile.xml)
$xml.tag1.tag2="newvalue"
$xml.Save(".\inputfile.xml")

2) 现在将以下代码另存为 .bat 文件在同一文件夹中,例如 editxml.bat

Powershell.exe -File  example.ps1

3) 使用 VB.NET 从 VB.NET 执行此 bat

process.start("editxml.bat")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    相关资源
    最近更新 更多