更新 XML 节点更改 XML 格式

Posted

技术标签:

【中文标题】更新 XML 节点更改 XML 格式【英文标题】:Updating XML Node Changes XML Formatting 【发布时间】:2013-03-19 06:21:39 【问题描述】:

我正在尝试更新 XML 文档并替换单个节点的内容,但是,在我保存 XML 文件后,我的格式完全不正确。

这是我的代码:

Public Sub UpdateSettingsXML(ByRef ElementName As String, ByRef ElementValue As String)
    Dim MyXML As New XmlDocument()
    Dim MyXMLNode As XmlNode

    MyXML.Load(SettingsXMLFile)
    MyXMLNode = MyXML.SelectSingleNode("//Data/Settings/" & ElementName)
    If Not MyXMLNode Is Nothing Then
        MyXMLNode.InnerText = ElementValue.ToString
        MyXML.Save(SettingsXMLFile)
    End If

    MyXMLNode = Nothing
    MyXML = Nothing
End Sub

我的原始 XML 文件(在我更新节点之前)如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<Data>   
 <Settings>
    <DropBoxLocation></DropBoxLocation>
    <ServerName></ServerName>
    <DatabaseName></DatabaseName>
    <Username></Username>
    <Password></Password>
    <OnlineFilename></OnlineFilename>
    <OfflineFilename></OfflineFilename>
    <EftposFilename></EftposFilename>
    <BankFilename></BankFilename>
    <POSFilename></POSFilename>
    <ProcessesFilename></ProcessesFilename>
    <FileReadDelay></FileReadDelay>   
 </Settings> 
</Data>

但是,一旦我保存了 XML 文件,我的格式将如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<Data>   
 <Settings>
    <DropBoxLocation>C:\Dropbox</DropBoxLocation>
    <ServerName>
    </ServerName>
    <DatabaseName>
    </DatabaseName>
    <Username>
    </Username>
    <Password>
    </Password>
    <OnlineFilename>
    </OnlineFilename>
    <OfflineFilename>
    </OfflineFilename>
    <EftposFilename>
    </EftposFilename>
    <BankFilename>
    </BankFilename>
    <POSFilename>
    </POSFilename>
    <ProcessesFilename>
    </ProcessesFilename>
    <FileReadDelay>
    </FileReadDelay>   
 </Settings> 
</Data>

不确定我做错了什么,但我似乎无法在网络上找到有关此问题的任何信息。想知道是否有人可以帮助我。任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

当您使用下面的代码时会发生什么? 它使用 PRESERVEWHITE 参数

它会修复你的格式吗?

Public Sub UpdateSettingsXML(ByRef ElementName As String, ByRef ElementValue As String)

  Dim MyXML As New XmlDocument()
  Dim MyXMLNode As XmlNode

  'REM - THIS LINE ADDED
  MyXML.PreserveWhitespace = false

  MyXML.Load(SettingsXMLFile)
  MyXMLNode = MyXML.SelectSingleNode("//Data/Settings/" & ElementName)
  If Not MyXMLNode Is Nothing Then
    MyXMLNode.InnerText = ElementValue.ToString

    'REM - THIS LINE ADDED
    MyXML.PreserveWhitespace = false
    MyXML.Save(SettingsXMLFile)
  End If
  MyXMLNode = Nothing
  MyXML = Nothing
End Sub

【讨论】:

感谢您的快速回复。尝试您的示例对输出没有任何影响,但是,将值更改为 true 已经实现了。 'REM - 此行已添加 MyXML.PreserveWhitespace = true 非常感谢您的帮助和快速响应。

以上是关于更新 XML 节点更改 XML 格式的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to XML - 更新节点并将其保存到 XML 文件

数据更改时如何更新 UI?

android中的xml文件更新

使用 simplexml 将 xml 节点值更新 1。是不是可以?

Powershell:如何更新XML节点属性值的特定字符

更新与 Xpath 查询匹配的多个 XML 节点 C#