阅读XML(从string),并获得一些领域 – 阅读XML的问题

我有这个XML(存储在一个名为myXML的C#string中)

 <?xml version="1.0" encoding="utf-16"?> <myDataz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <listS> <sog> <field1>123</field1> <field2>a</field2> <field3>b</field3> </sog> <sog> <field1>456</field1> <field2>c</field2> <field3>d</field3> </sog> </listS> </myDataz> 

我想浏览所有的<sog>元素。 对于他们每个人,我想打印孩子<field1>

所以这是我的代码:

 XmlDocument xmlDoc = new XmlDocument(); string myXML = "<?xml version=\"1.0\" encoding=\"utf-16\"?><myDataz xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><listS><sog><field1>123</field1><field2>a</field2><field3>b</field3></sog><sog><field1>456</field1><field2>c</field2><field3>d</field3></sog></listS></myDataz>" xmlDoc.Load(myXML); XmlNodeList parentNode = xmlDoc.GetElementsByTagName("listS"); foreach (XmlNode childrenNode in parentNode) { HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("//field1").Value); } 

但似乎我不能读取一个string为XML? 我得到System.ArgumentException

你应该使用LoadXml方法,而不是Load:

 xmlDoc.LoadXml(myXML); 

Load方法试图从文件中加载xml,并从string中加载LoadXml。 您也可以使用XPath:

 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); string xpath = "myDataz/listS/sog"; var nodes = xmlDoc.SelectNodes(xpath); foreach (XmlNode childrenNode in nodes) { HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("//field1").Value); } 

使用Linq-XML,

 XDocument doc = XDocument.Load(file); var result = from ele in doc.Descendants("sog") select new { field1 = (string)ele.Element("field1") }; foreach (var t in result) { HttpContext.Current.Response.Write(t.field1); } 

OR:获取<sog>标签的节点列表。

  XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(myXML); XmlNodeList parentNode = xmlDoc.GetElementsByTagName("sog"); foreach (XmlNode childrenNode in parentNode) { HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("field1").InnerText); } 

其他的答案是几年(而不适用于Windows Phone 8.1),所以我想我会放弃另一种select。 我用它来parsingWindows Phone应用程序的RSS响应:

 XDocument xdoc = new XDocument(); xdoc = XDocument.Parse(xml_string); 

或者使用XmlSerializer类。

 XmlSerializer xs = new XmlSerializer(objectType); obj = xs.Deserialize(new StringReader(yourXmlString)); 

我用System.Xml.Linq.XElement来达到这个目的。 只需检查下面的代码来读取xml的第一个子节点(不是根节点)的值。

  string textXml = "<xmlroot><firstchild>value of first child</firstchild>........</xmlroot>"; XElement xmlroot = XElement.Parse(textXml); string firstNodeContent = ((System.Xml.Linq.XElement)(xmlroot.FirstNode)).Value;