我有一个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)
所以我想现在唯一的问题是,这个方法有什么问题吗?
答案 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)。
当然,任何评论和/或建议都是受欢迎的。