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