2008-10-12 15 views
7

मैं एक XML फ़ाइल है, जो मैं इस तरह एफ # में खुला है:मैं FQ में LINQ से XML का उपयोग करके विशिष्ट टैग कैसे निकाल सकता हूं?

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

एक बार मैं XDocument मैं एक्सएमएल के लिए LINQ का उपयोग कर यह नेविगेट और सभी विशिष्ट टैग को निकालने के लिए की जरूरत है। मेरे समाधान का एक हिस्सा है:

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 फ़ाइल से विशिष्ट टैग कैसे निकाल सकता हूं?

+0

बस एक नाइटपिक, "चलो xname (टैग: स्ट्रिंग) = XName.Get (टैग)", स्ट्रिंग का प्रकार एनोटेशन अनावश्यक है। – MichaelGG

+1

उस मामले के लिए, संपूर्ण पैरामीटर अनावश्यक है। 'xname = XName.Get' एक ही चीज़ को पूरा करने दें। –

उत्तर

10
#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" 

यह "बुकमार्क" के सभी वंशज तत्वों मिल जाएगा। यदि आप केवल प्रत्यक्ष वंशज चाहते हैं, तो एलिमेंट्स विधि का उपयोग करें (xd.Root.Elements < | xname "जो कुछ भी")।

3

चेतावनी: मैं कभी नहीं LINQ करने वाली एक्सएमएल से पहले किया है, लेकिन विषय पर अन्य पदों के माध्यम से देख, यह स्निपेट कुछ एफ # कोड है कि संकलित करता है तथा कुछ करता है, और इस प्रकार यह मदद मिल सकती है आप आरंभ करने के होते हैं:

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))) 
संबंधित मुद्दे