Как я могу извлечь определенные теги, используя LINQ to XML в F #? - PullRequest
7 голосов
/ 12 октября 2008

У меня есть файл XML, который я открываю в F # следующим образом:

let Bookmarks(xmlFile:string) = 
    let xml = XDocument.Load(xmlFile)

Когда у меня есть XDocument, мне нужно перемещаться по нему с помощью LINQ to XML и извлекать все конкретные теги. Часть моего решения:

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)

Как я могу извлечь определенные теги из файла XML?

Ответы [ 2 ]

10 голосов
/ 12 октября 2008
#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"

Здесь будут найдены все элементы-потомки «закладки». Если вам нужны только прямые потомки, используйте метод Elements (xd.Root.Elements <| xname "what"). </p>

3 голосов
/ 12 октября 2008

Предупреждение: я никогда раньше не делал 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...