2012-06-03 19 views
0

我的程序有一個xml文件作爲輸入,並且我想只取某一行的內容,不帶xml標籤。 例如:從一個XML文件中取出沒有標籤的行的內容

<string> xxx </string> 

我怎樣才能得到「xxx」?

+6

不要使用正則表達式,使用XPath去代替。 – toniedzwiedz

+3

爲什麼總是正則表達式? http://stackoverflow.com/questions/8577060/why-is-it-such-a-bad-idea-to-parse-xml-with-regex – pad

+0

好的,我不會使用正則表達式:) 我只是檢查選項.. – cookya

回答

0

如果你不使用嵌套的標籤,你可以使用如下因素(只需要獲得第一組):

<.*?>([^<]*)<.*?> 

但如果你真的在你的XML使用嵌套的標籤,你不能得到值只有正則表達式,它需要一個堆棧或某種列表來做到這一點。

+1

認真嗎?沒有嵌套標籤的XML文檔? – toniedzwiedz

+0

任何事情都是可能的,因爲我們不知道他的XML文件的結構以及他想完成什麼。 –

+0

我不會低估答案,因爲它在技術上是正確的。但是,它的有用性幾乎沒有和IMO一樣,它沒有指向任何接近正確方向的地方。 – toniedzwiedz

7

正如評論中提到的,你不應該使用正則表達式來解析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 
+0

謝謝。如果我希望它取得價值,不管標籤名稱是什麼?有沒有選擇? – cookya

+2

@cookya如果它是一個根元素,那麼你可以寫'doc.Root.Value'。否則,你需要使用'Elements()'返回的第一個元素,並寫入類似'(doc.Elements()|> Seq.head).Value'。 –

1
#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() 
相關問題