2011-05-05 121 views
1

我需要在c#中使用system.xml解析下面的xml代碼。我需要一個包含標籤User內容的字符串列表。如何解析這個XML?

<Configuration> 
    .... 
    <DebugUsersMail> 
    <User>[email protected]</User> 
    <User>[email protected]</User> 
    </DebugUsersMail> 
    ... 
</Configuration> 
+0

你已經錯過了示例XML – 2011-05-05 10:10:08

+0

哪裏是XML? – YesMan85 2011-05-05 10:10:18

+0

對不起。它現在在那裏。 – Luke 2011-05-05 10:11:16

回答

1

我找到了一個解決方案:

List<string> returnList = new List<string>(); 
XmlNodeList node = xmlDocument.GetElementsByTagName("DebugUsersMail"); 
XmlNodeList childNodes = node[0].ChildNodes; 
for(int i = 0; i < childNodes.Count; i++) 
{ 
    returnList.Add(childNodes[i].InnerText); 
} 
return returnList; 
0

有很多方法可以在C#中完成。您可以使用:

  • 的XmlDocument andthen XPath和XQuery
  • 的XDocument和LINQ
  • 的XmlTextReader/SAX
  • 正則表達式
  • Deserialise的XML對象

路線採取取決於XML的其他部分。

+0

我已經寫過,我在使用system.xml。我需要一個檢查。 – Luke 2011-05-05 10:14:28

+0

System.xml包含以上所有內容。 – Aliostad 2011-05-05 10:15:00

+1

@Luke:你試過了什麼?你有沒有讀過system.xml上的MSDN文檔? – 2011-05-05 10:15:58

2

如果你可以使用LINQ這樣的事情是好的,簡單

XDocument xmlDoc = XDocument.Load("C:\\your_xml_file.xml"); 
    List<string> users = xmlDoc.Descendants("User").Select(xElem => (string)xElem).ToList(); 

你需要在你的using語句使用XDocument對象以System.Xml.Linq的一個參考。

但是,這確實假定xml文件中沒有其他用戶元素不包含在列表中。

如果您想更具體的你可以這樣做

List<string> users = xmlDoc.Descendants("DebugUsersMail") 
          .Descendants("User").Select(xElem => (string)xElem).ToList(); 
+0

當我編輯此代碼時,我收到以下錯誤消息:System.Collections.Generic.IEnumerable '不包含'選擇'的定義並且沒有擴展方法'選擇'接受可以找到類型'System.Collections.Generic.IEnumerable '的第一個參數(您是否缺少using指令或程序集引用?)我確實引用了程序集。我使用.Net Framework 3.5。我是否需要4.0版本的代碼? – Luke 2011-05-05 11:33:59

+0

看起來你沒有在你的使用語句中引用Linq。嘗試使用System.Linq添加;到你的使用。它應該在3.5上正常工作,就像我爲它編寫的那樣 – Gavin 2011-05-05 11:39:28