使用 xml 类型提供程序时获取 xml-样式表?

Get xml-stylesheet when using xml type provider?

如何使用 xml 类型提供程序获取 xml-stylesheet

let xml = XmlProvider<"""<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type='text/xsl' href='/stylesheets/application_internet.xsl'?>
<application>......</application>""").GetSample()

let stylesheetHref = xml.....?

期望字符串 '/stylesheets/application_internet.xsl'

据我所知,没有使用 TypeProviders(或 Linq to XML)获取处理指令和相关数据的简单方法。

不过也可以这样做:

对于您的示例 XML GetSample returns 只是根元素内容,即 ......。稍微改变一下,我们就可以访问根 XElement。知道处理节点是它的前一个兄弟节点,我们可以得到一个 XProcessingInstruction 并从它的 Data.

中提取 url
#I "../packages/FSharp.Data.2.2.5/lib/net40"    
#r "System.Xml.Linq"
#r "FSharp.Data.dll"

open FSharp.Data
open System.Text.RegularExpressions
open System.Xml.Linq

let href s = Regex.Match(s, "href='(?<url>.*?)'").Groups.["url"].Value

type Xml = XmlProvider<"""<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type='text/xsl' href='/stylesheets/application_internet.xsl'?>
<application><other></other></application>""">

let doc = Xml.GetSample()

let stylesheetProcessing = (doc.XElement.PreviousNode :?> XProcessingInstruction)

// /stylesheets/application_internet.xsl
let url = href stylesheetProcessing.Data

显然,此代码期望 XML 始终在同一位置具有有效指令。添加错误处理留作练习:-)