如何在F#中使用LINQ to XML提取特定标记?

如何在F#中使用LINQ to XML提取特定标记?,f#,linq-to-xml,F#,Linq To Xml,我有一个XML文件,我在F#中打开它,如下所示: let Bookmarks(xmlFile:string) = let xml = XDocument.Load(xmlFile) 一旦我有了XDocument,我需要使用LINQtoXML导航它,并提取所有特定的标记。我的部分解决方案是: let xname (tag:string) = XName.Get(tag) let tagUrl (tag:XElement) = let attribute = tag.Attribute(

我有一个XML文件,我在F#中打开它,如下所示:

let Bookmarks(xmlFile:string) = 
    let xml = XDocument.Load(xmlFile)
一旦我有了XDocument,我需要使用LINQtoXML导航它,并提取所有特定的标记。我的部分解决方案是:

let xname (tag:string) = XName.Get(tag)
let tagUrl (tag:XElement) = let attribute = tag.Attribute(xname "href")
                            attribute.Value
let Bookmarks(xmlFile:string) = 
    let xml = XDocument.Load(xmlFile)
    xml.Elements <| xname "A" |> Seq.map(tagUrl)
让xname(tag:string)=xname.Get(tag)
let tagUrl(tag:XElement)=let attribute=tag.attribute(xname“href”)
属性值
让书签(xmlFile:string)=
让xml=XDocument.Load(xmlFile)
xml.Elements Seq.map(tagUrl)

如何从XML文件中提取特定的标记?

警告:我以前从未使用过linq to XML,但通过查看有关该主题的其他帖子,此片段包含一些编译和执行某些操作的F#代码,因此可以帮助您开始:

open System.IO
open System.Xml
open System.Xml.Linq 

let xmlStr = @"<?xml version='1.0' encoding='UTF-8'?>
<doc>
    <blah>Blah</blah>
    <a href='urn:foo' />
    <yadda>
        <blah>Blah</blah>
        <a href='urn:bar' />
    </yadda>
</doc>"

let xns = XNamespace.op_Implicit ""
let a = xns + "a"
let reader = new StringReader(xmlStr)
let xdoc = XDocument.Load(reader)
let aElements = [for x in xdoc.Root.Elements() do
                 if x.Name = a then
                     yield x]
let href = xns + "href"
aElements |> List.iter (fun e -> printfn "%A" (e.Attribute(href)))
opensystem.IO
开放系统.Xml
open System.Xml.Linq
让xmlStr=@”
废话
废话
"
设xns=XNamespace.op_隐式“”
设a=xns+a
let reader=new StringReader(xmlStr)
让xdoc=XDocument.Load(读卡器)
让AEElements=[对于xdoc.Root.Elements()中的x
如果x.Name=a,则
收益率x]
让href=xns+“href”
aElements |>List.iter(乐趣e->printfn“%A”(e.Attribute(href)))
#灯
开放系统
open System.Xml.Linq
让xname s=xname.Get(s)
让书签(xmlFile:string)=
让xd=XDocument.Load xmlFile

xd.com只是一个吹毛求疵的东西,在“let xname(tag:string)=xname.Get(tag)”中,string的类型注释是不必要的。因此,整个参数是不必要的
让xname=xname.Get完成同样的事情。
#light
open System
open System.Xml.Linq

let xname s = XName.Get(s)
let bookmarks (xmlFile : string) = 
    let xd = XDocument.Load xmlFile
    xd.Descendants <| xname "bookmark"