这是保存按“key”属性排序的配置文件的合适方法吗?

时间:2012-05-30 15:53:33

标签: .net xml vb.net linq linq-to-xml

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

经过大量的试验和错误 - 使用我从这里,那里和任何地方收集的代码 - 我已经提出了下面的代码。它似乎工作正常,但我只是刚开始学习Linq到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)

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

1 个答案:

答案 0 :(得分: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)。

当然,任何评论和/或建议都是受欢迎的。