実行する必要のあるユーティリティジョブの1つにF#を使用しようとしています。
xml構成ファイルを含むディレクトリから、検索対象の属性を持つ特定のノードを含むすべてのファイルを識別し、一致するものを見つけたら、同じファイルに兄弟ノードを挿入したいと思います。すべてのファイルを識別するためのスニペットを作成しました。これで、属性を繰り返して検索し、必要に応じて追加する一連のファイルができました。
open System.Xml.Linq
let byElementName elementToSearch = XName.Get(elementToSearch)
let xmlDoc = XDocument.Load(@"C:\\Some.xml")
xmlDoc.Descendants <| byElementName "Elem"
|> Seq.collect(fun(riskElem) -> riskElem.Attributes <| byElementName "type" )
|> Seq.filter(fun(pvAttrib) -> pvAttrib.Value = "abc")
|> Seq.map(fun(pvAttrib) -> pvAttrib.Parent)
|> Seq.iter(printfn "%A")
私がやりたいのは、最後のprintfの代わりに、このタイプの別のノードを追加することです"Elem"
。type = "abc2"
<Product name="Node" inheritsfrom="Base">
<SupportedElems>
<Elem type="abc" methodology="abcmeth" />
<Elem type="def" methodology="defmeth" />
</SupportedElems>
</Product>
結果XML:
<Product name="Node" inheritsfrom="Base">
<SupportedElems>
<Elem type="abc" methodology="abcmeth" />
<Elem type="abc2" methodology="abcmeth" /> <!-- NEW ROW TO BE ADDED HERE -->
<Elem type="def" methodology="defmeth" />