2016-07-08 3 views
1

xml型プロバイダを使用してxml-stylesheetを取得するにはどうすればよいですか?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'

答えて

2

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が常に同じ場所に有効な命令を持つことを期待しています。エラー処理を追加することは練習として残されています:-)

関連する問題