如何将XML转换为List 或String ?
如何将以下XML转换为List
或String[]
:
1 2
听起来你只是解析而不是完整的XML序列化/反序列化。 如果您可以使用LINQ to XML,这非常简单:
using System; using System.Linq; using System.Xml.Linq; public class Test { static void Main() { string xml = "1 2 "; 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 = "1 2 "; // 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);
任何类型的集合。 例如 :
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(); } } }
当然,解析双打并将它们一直转换回字符串可能会被一些程序员视为亵渎……即使对我来说也很难不去考虑这样的资源浪费……但我想有时候最好转过来另一个离开..不要强调它:)