我正在尝试使用 XML 类型提供程序处理 Twitter 推文,如下面的代码所示。该代码在使用 LINQ XElement 函数访问推文数据值时工作正常,但是在使用由 XMLProvider 创建的类型时,它会失败并出现异常提示:“XML 不匹配:预期只有一个 'title' 子级”。我知道没有给出命名空间,但是,如果需要,我不知道如何通过提供者指定它们。
// ...
open FSharp.Net
open FSharp.Data
let ns = "http://www.w3.org/2005/Atom"
// General helpers for XML
let xelem s (el: XContainer) = el.Element(XName.Get(s, ns))
// ...
let xvalue (el: XElement) = el.Value
let twitterUri = "http://search.twitter.com/search.atom?q=Windows8&rpp=100&lang=en"
type Tweets = XmlProvider<"SampleTweets.xml", Global=false>
let feed = Tweets.Load twitterUri
// title 0 & 1 produce correct values
let title0 = feed.XElement |> xelem "title" |> xvalue
let title1 = feed.XElement |> xelem "entry" |> xelem "title" |> xvalue
// title 2 produces: "XML mismatch: Expected exactly one 'title' child"
let title2 = feed.Title
let title3 = feed.GetEntries().[0].Title