私のプログラムには入力としてxmlファイルがあり、xmlタグを使用せずに、特定の行のコンテンツのみを取得したいと考えています。例:
<string> xxx </string>
「xxx」だけを取得するにはどうすればよいですか?
コメントで述べたように、正規表現を使用して XML を解析するべきではありません。.NET にはそれを行うための優れたライブラリがあるためです。XDocument
LINQ から XML への型を使用した例を次に示します。
// Reference assemblies for LINQ to XML
#r "System.Xml.dll"
#r "System.Xml.Linq.dll"
open System.Xml.Linq
// Create document with your XML data
let doc = XDocument.Parse("<string> xxx </string>")
let el name = XName.Get(name)
// Get element named 'string' and pick its value
doc.Element(el "string").Value
#r "System.Xml.Linq.dll"
open System
open System.Linq
open System.Xml.Linq
let toXName s = XName.Get s
let xml = XDocument.Load @"data.xml"
let getElements elName = xml.Root.Descendants(toXName elName)
let main() =
(getElements "string").First().Value
|> printfn "%s"
// getElements "string" |> Seq.iter (fun x -> printfn "%s" x.Value)
do main()
ネストされたタグを使用していない場合は、次を使用できます (最初のグループを取得する必要があるだけです)。
<.*?>([^<]*)<.*?>
ただし、xml でネストされたタグを実際に使用する場合、正規表現だけで値を取得することはできません。そのためには、スタックまたはある種のリストが必要です。