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