2011-05-05 110 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