将XML文档转换为IEnumerable

时间:2014-07-11 15:22:28

标签: c# .net asp.net-mvc-4 rest

我有一个XML文档,我根据我的模型类反序列化,现在我想将它转换为IEnumerable<XmlDocument>IEnumerable<string>这是我的函数的返回类型,所以我可以返回有效我的MVC REST API的XML回复。

        XmlDocument xml = new XmlDocument();
        xml.LoadXml(responseStream);
        XmlSerializer x = new XmlSerializer(typeof(mSchoolModel));
        mSchoolModel mgp = (mSchoolModel)x.Deserialize(responseObj.GetResponseStream());
        //return xml;

所以任何人都可以帮助我如何将其转换为IEnumerable

1 个答案:

答案 0 :(得分:0)

使用LINQ-to-XML API。

  1. XmlDocument实例转换为XDocument实例。有关说明,请访问:http://blogs.msdn.com/b/xmlteam/archive/2009/03/31/converting-from-xmldocument-to-xdocument.aspx
  2. 使用XDocument实例上的Elements()Descendants()方法获取IEnumerable<XElement>
  3. 使用LINQ Enumerable.Select()运算符将IEnumerable<XElement>转换为IEnumerable<string>
  4. 这是一个简单的例子:

    IEnumerable<string> elements 
      = XDocument
        .Load(new XmlNodeReader(xml))
        .Elements()
        .Select(element => element.ToString());
    

    *注意:由于有效的XML文档只能有一个根节点,因此上面示例中的结果集合不会很有趣,但是您应该有足够的资源来获取所需的内容。如果您熟悉XPath,您可能会发现使用XPath扩展到LINQ to XML更容易获得所需的元素。请参阅:How To: Query LINQ to XML Using XPath

    更新

    意识到我可能读错了你的问题。如果您有一个XmlDocument实例,并且需要返回IEnumerable<XmlDocument>,那么您只需将实例包装在一个集合中即可。例如,

     IEnumerable<XmlDocument> xmlCollection = new XmlDocument[]{ xml };
    

    当然,这种方法可用于将任何对象包装到相同类型的单个对象集合中。