如何将XML转换为List 或String ?

如何将以下XML转换为ListString[]

  1 2  

听起来你只是解析而不是完整的XML序列化/反序列化。 如果您可以使用LINQ to XML,这非常简单:

 using System; using System.Linq; using System.Xml.Linq; public class Test { static void Main() { string xml = "12"; XDocument doc = XDocument.Parse(xml); var list = doc.Root.Elements("id") .Select(element => element.Value) .ToList(); foreach (string value in list) { Console.WriteLine(value); } } } 

事实上,对Elements的调用可以省略参数,因为只有id元素,但我想我会演示如何指定你想要的元素。

同样地,我通常不会打扰调用ToList除非我真的需要一个List – 没有它,结果是IEnumerable ,如果你只是迭代它一次就没问题。 要改为创建数组,请使用ToArray

以下是使用XmlDocument的方法:

 // A string containing the XML data string xml = "12"; // The list you want to fill ArrayList list = new ArrayList(); XmlDocument doc = new XmlDocument(); // Loading from a XML string (use Load() for file) doc.LoadXml(xml); // Selecting node using XPath syntax XmlNodeList idNodes = doc.SelectNodes("Ids/id"); // Filling the list foreach (XmlNode node in idNodes) list.Add(node.InnerText); 

任何类型的集合。 例如 :

C:\videotest\file0.txt C:\videotest\file1.txt

 class FileFormat { public FileFormat(string path) { this.path = path; } public string FullPath { get { return Path.GetFullPath(path); } } public string FileName { get { return Path.GetFileName(path); } } private string path; } List Files = selectedNode .Descendants("Ids") .Elements("Id") .Select(x => new FileFormat(x.Value)) .Where(s => s.FileName!=string.Empty) .ToList(); 

将字符串数组转换为xml的代码

items是一个字符串数组

 items.Aggregate("", (current, x) => current + ("" + x + "")) 

此示例将与.NET framework 3.5一起使用:

  System.Xml.Linq.XElement element = System.Xml.Linq.XElement.Parse(" 1 2"); System.Collections.Generic.List ids = new System.Collections.Generic.List(); foreach (System.Xml.Linq.XElement childElement in element.Descendants("id")) { ids.Add(childElement.Value); } 

此示例将与.NET framework 4.0一起使用:

进入清单

  List Ids= new List(); Ids= selectedNode.Descendants("Ids").Elements("Id").Select(> x=>x.Value).Where(s =>s!= string.Empty).ToList(); 

成一个字符串[]

  string[] Ids= thisNode .Descendants("Ids") // Ids element .Elements("Id") // Id elements .Select(x=>x.Value) // XElement to string .Where(s =>s!= string.Empty) // must be not empty .ToArray(); // string to string [] 

您可以使用Properties类。

 Properties prop = new Properties(); prop.loadFromXML(stream); Set set = prop.keySet(); 

您可以为每个键访问set中的字符串。 键是xml的元素名称。

这是一种使用DataSet从xml获取类型化数组的方法。 (在此示例中为双精度数组)

 DataSet dataSet = new DataSet() DoubleArray doubles = new DoubleArray(dataSet,0); dataSet.ReadXml("my.xml"); double a = doubles[0]; public class DoubleArray { DataSet dataSet; int tableIndex; public DoubleArray(DataSet dataSet,int tableIndex) { this.dataSet=dataSet; this.tableIndex=tableIndex; } public double this[int index] { get { object ret = dataSet.Tables[tableIndex].Rows[index]; if(ret is double?) return (ret as double?).Value; else return double.Parse(ret as string); } set { object out = dataSet.Tables[tableIndex].Rows[index]; if(out is double?) dataSet.Tables[tableIndex].Rows[index] = (double?)value; else dataSet.Tables[tableIndex].Rows[index] = value.ToString(); } } } 

当然,解析双打并将它们一直转换回字符串可能会被一些程序员视为亵渎……即使对我来说也很难不去考虑这样的资源浪费……但我想有时候最好转过来另一个离开..不要强调它:)