【发布时间】:2012-07-15 06:13:39
【问题描述】:
我正在尝试将 F# 用于我需要运行的实用程序之一。
从包含 xml 配置文件的目录中,我想识别包含特定节点的所有文件,并且在找到匹配项时,我想在同一个文件中插入一个兄弟节点。 我已经编写了 sn-p 来识别所有文件,现在我有一系列文件,我想对其进行迭代并搜索属性并在必要时追加。
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" />
【问题讨论】:
-
您忘记了一些结束标签吗? xml 文件格式不正确。
-
xml 继续使用类似的标签。现在将编辑问题
标签: f# xml-parsing linq-to-xml