在F#中,我想做类似的事情。
let xml = XDocument.Load(url);
可以动态解析xml,我会在intellisense中获得xml树。
let products = xml.root.products;
数组可以过滤而值和属性可直接使用
let productSoap = xml.root.products.Where(o => o.productName == "Soap");
let documentName = xml.root.DocumentName;
为什么我需要在函数式语言中使用System.Xml和System.Xml.Linq来解析xml?
答案 0 :(得分:1)
以下评论是正确的,遗憾的是您需要等待F#的Type Providers功能才能在“开发时间”执行此操作。 (这样F#的IntelliSense将进行XML解析,并在编写代码时为您提供数据。)
但是,与此同时,您可以使用XSD.exe tool生成包装XML文档的.NET库。请参阅快速教程here。
工作流程是:
IIRC,xsd.exe早在LINQ和更现代的.NET功能之前编写,因此生成的对象模型有点笨重。但是,它不仅仅是自己解析文档并使用XPath盲目查询数据。
以下是教程中的代码段:
StreamReader str = new StreamReader("cd_catalog.xml");
XmlSerializer xSerializer = new XmlSerializer(typeof(CATALOG));
CATALOG myCdCatalogue = (CATALOG)xSerializer.Deserialize(str);
foreach (CATALOG.CDRow cd in myCdCatalogue.CD)
{
Console.WriteLine(cd.TITLE);
Console.WriteLine(cd.ARTIST);
Console.WriteLine(cd.COUNTRY);
Console.WriteLine(cd.COMPANY);
Console.WriteLine(cd.PRICE);
Console.WriteLine(cd.YEAR);
Console.WriteLine();
}
str.Close();