2014-04-19 54 views
1

目前我正在處理的應用程序將XML返回爲字符串。如何將Xml轉換爲字符串數組

String xml = getData(); 

但現在我需要將其轉換爲一個字符串數組,XML將是這樣的:

<details> 
<row> 
    <Year>2014</Year> 
    <Person>Bob</Person> 
</row> 
<row> 
    <Year>2013</Year> 
    <Person>Fred</Person> 
</row> 
</details> 

我見過如何,如果XML被保存在一個文件,但這個不會做這個是一個選擇。 任何想法?

我想有類似的價值觀這樣看陣列的字典數組或列表: 一年,一年,一年

人,人,人

+2

你到底想有數組中? XML的每一行?有人名的數組?還是其他什麼? –

+0

從XML中分享您期望的數組格式 –

+0

編輯成我試圖擺脫它的內容 –

回答

3

你可以試試這個方法:

var doc = XDocument.Parse(xml); 
var rows = from row in doc.Root.Elements("row") select row; 

//array of person 
var persons = rows.Select(o => (string) o.Element("Person")).ToArray(); 
//array of year 
var years = rows.Select(o => (string)o.Element("Year")).ToArray(); 

如果你的意思是讓所有元素中<row>在單個陣列中,試試這個方法:

//you can remove OrderBy part if it isn't necessary 
var result = rows.SelectMany(o => o.Elements()) 
       .OrderBy(o => o.Name.LocalName) 
       .Select(o => (string) o).ToArray(); 
+0

有沒有在編譯時不知道名稱「行」或xml結構這樣做的方法? –

+0

是的,我確定有一種方法。但這取決於你可能擁有的可能的XML結構。嘗試發佈幾個示例XML,以便我們不能硬編碼元素名稱「行」 – har07

+0

那麼假設它具有類似的結構,但可能不同的元素名稱? –

0

按照在此給出的答案post

var rows = XDocument.Load("filename.xml") 
        .Root.Elements() 
        .Select(row => row.Elements() 
             .ToDictionary(v => v.Attribute("name").Value, 
                v => v.Attribute("value").Value); 
+0

我可以使用帶有xml的字符串數據類型作爲加載參數嗎?否則這不會幫助 –

+0

是的,你可以在load方法中傳遞字符串參見定義'public static XDocument Load(TextReader textReader);' – Nilesh

+0

這個方法可以是動態的,例如如果在運行時不知道屬性及其名稱的數量 –

0

假設「細節」是你XMLFILE的根元素和文件的名稱是「XMLFile1.xml」,您可以使用此:

XmlDocument doc = new XmlDocument(); 
doc.Load("XMLFile1.xml"); 

var rows = doc.GetElementsByTagName("row").Cast<XmlElement>(); 
var persons = rows.SelectMany(x => x.GetElementsByTagName("Person") 
    .Cast<XmlElement>()).ToArray().Select(x => x.InnerText).ToArray(); 
var years = rows.SelectMany(x => x.GetElementsByTagName("Year") 
    .Cast<XmlElement>()).ToArray().Select(x => x.InnerText).ToArray(); 

並且不要忘記包含Linq名稱空間。

+0

有沒有在編譯時不知道名稱「行」或xml結構這樣做的方法? –

相關問題