TypeProviders(またはLinq to XML)を使用して処理命令と関連データを取得する方法がわかりません。
これは、しかし、このように行うことができます。
ルート要素のみのコンテンツあなたの例のXML GetSample
戻り、すなわち......
について。これを少し変更すると、ルート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が常に同じ場所に有効な命令を持つことを期待しています。エラー処理を追加することは練習として残されています:-)