当前位置:  开发笔记 > 编程语言 > 正文

F#XML解析

如何解决《F#XML解析》经验,为你挑选了3个好方法。

这个c#代码可能不是最有效的,但得到我想要的.

如何在F#代码中完成同样的事情?

    string xml = "  " +
               "      test@email.com " +
               "      test2@email.com " +
               "  ";

    XmlDocument xdoc = new XmlDocument();
    XmlNodeList nodeList;
    String emailList = string.Empty;
    xdoc.LoadXml(xml);
    nodeList = xdoc.SelectNodes("//EmailList");
    foreach (XmlNode item in nodeList)
    {
        foreach (XmlNode email in item)
        {
             emailList +=  email.InnerText.ToString() +  Environment.NewLine ;
        }               
    }

Derek Slager.. 48

let doc = new XmlDocument() in
    doc.LoadXml xml;
    doc.SelectNodes "/EmailList/Email/text()"
        |> Seq.cast
        |> Seq.map (fun node -> node.Value)
        |> String.concat Environment.NewLine

如果你真的想要最终的尾随换行符,可以在地图中添加它,并使用空字符串添加String.concat.



1> Derek Slager..:
let doc = new XmlDocument() in
    doc.LoadXml xml;
    doc.SelectNodes "/EmailList/Email/text()"
        |> Seq.cast
        |> Seq.map (fun node -> node.Value)
        |> String.concat Environment.NewLine

如果你真的想要最终的尾随换行符,可以在地图中添加它,并使用空字符串添加String.concat.



2> marapet..:

与F#Data XML Type Provider一样:

type EmailList = XmlProvider<"""emailemail""">
let data = EmailList.Parse("""
    
        test@email.com
        test2@email.com
    
    """)

let emailList = data.Emails |> String.concat Environment.NewLine



3> JaredPar..:

这是在F#中执行此操作的类似代码.我相信其中一个F#忍者会在一分钟之内将更好的版本放在这里.

open System.Xml

let getList x = 
    let getDoc =
        let doc = new XmlDocument()
        doc.LoadXml(x) |> ignore
        doc
    let getEmail (n:XmlNode) = n.InnerText.ToString() 
    let doc = getDoc
    let build = new System.Text.StringBuilder()
    doc.SelectNodes("//EmailList") 
        |> Seq.cast
        |> Seq.map (fun n -> n.ChildNodes )
        |> Seq.map_concat (Seq.cast)
        |> Seq.map(fun (n:XmlNode) -> getEmail n) 
        |> Seq.iter (fun e -> build.AppendLine(e) |> ignore )
    build.ToString()

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有