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

时间:2016-07-08 22:10:58

标签: f# f#-data

如何使用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'

1 个答案:

答案 0 :(得分:2)

我不知道使用TypeProviders(或Linq to XML)获取处理指令和相关数据。

但是可以这样做:

对于您的示例,XML GetSample仅返回根元素内容,即......。改变一点可以让我们访问根XElement。知道处理节点是它的前一个兄弟,我们可以得到XProcessingInstruction并从url中提取Data

#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始终在同一位置具有有效指令。添加错误处理留作练习: - )