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 に答える