1

我有一个 XML 配置文件,我偶尔会向其中添加新元素,并且为了便于在应用程序之外阅读,我希望通过“add”元素的“key”属性保持它按字母顺序排序。

经过大量的试验和错误——使用我从这里、那里和任何地方收集的代码——我想出了下面的代码。它似乎工作正常,但我才刚刚开始学习 Linq to XML,所以我想知道这是否是一种合适的方法,或者是否有更好/更有效的方法我错过了。感觉就像我可能在重新创建整个文件元素时采取了不必要的步骤。

任何指导、想法或见解将不胜感激。

    Dim newEx = cfgEx.<appSettings>(0)
    newEx.Add(<add key=<%= sNewKey %> value=<%= sValue %>/>)
    Dim sortEx = <configuration>
                     <appSettings>
                         <%= From c In cfgEx.<appSettings>.<add> Order By c.@key Select c %>
                     </appSettings>
                 </configuration>
    cfgEx.ReplaceAll(sortEx.Nodes)
    cfgEx.Save(sXmlConfigFile)

编辑

好的,所以我想我已经找到了一种更好的方法来做到这一点——无需在sortEx变量中显式地重新创建所有父标签:

    Dim newEx = cfgEx.<appSettings>(0)
    newEx.Add(<add key=<%= sNewKey %> value=<%= sValue %>/>)
    Dim sortEx = From c In newEx.<add> Order By c.@key Select c
    newEx.ReplaceAll(sortEx)
    cfgEx.Save(sXmlConfigFile)

所以我想现在唯一的问题是,这种方法有什么问题吗?

4

1 回答 1

0

好吧,在没有任何其他回复的情况下,我将发布我的编辑作为答案——因为它可能对任何寻找将新元素添加到组的方法的其他人有用,按属性按字母顺序对该组进行排序,然后将整个分支保存回原始文件。出于某种原因,我发现很难获得最后一部分的信息。

Dim newEx = cfgEx.<appSettings>(0)
newEx.Add(<add key=<%= sNewKey %> value=<%= sValue %>/>)
Dim sortEx = From c In newEx.<add> Order By c.@key Select c
newEx.ReplaceAll(sortEx)
cfgEx.Save(sXmlConfigFile)

我显然不能肯定这是否是理想的方法,但我可以说它对我来说似乎工作得很好——尽管文件相对较小(~15k)。

当然,仍然欢迎任何意见和/或建议。

于 2012-06-01T08:33:19.680 回答