C# XML 多子级

美好的一天!我正在尝试使用数据集解析 XML 子子项。问题是当它具有多个值时它不读取“SiteCode”。

例如:

http://img3.mukewang.com/612219d20001aca405080176.jpg

string filePath = @"" + _clsPathIntervalSttngs.localPath + "/" + "hehe.xml";

               

DataSet dataSet = new DataSet()

dataSet.ReadXml(filePath, XmlReadMode.InferSchema);

// Then display informations to test

foreach (DataTable table in dataSet.Tables)

{

     Console.WriteLine(table);

     for (int i = 0; i < table.Columns.Count; ++i)

     {

         Console.Write("\t" + table.Columns[i].ColumnName.Substring(0, Math.Min(6, table.Columns[i].ColumnName.Length)));

         Console.WriteLine();

     }

     foreach (var row in table.AsEnumerable())

     {

         for (int i = 0; i < table.Columns.Count; ++i)

         {

              Console.Write("\t" + row[i]);

         }

              Console.WriteLine();

     }

}       

这就是它正在返回的内容。

http://img1.mukewang.com/612219de00014a1403320103.jpg

它返回 0 值并选择产品而不是站点代码。

我哪里出错了?


白猪掌柜的
浏览 177回答 2
2回答

慕的地8271018

您可能需要检查代码,因为我只是拿了一些类似的东西并将其更改为查看您的文档层次结构。我也没有使用DataSet. 考虑以下代码:var filePath = "<path to your file.xml>";var xml = XDocument.Load(filePath);var items = from item in xml.Descendants("Product").Elements()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select item.Value;Array.ForEach(items.ToArray(), Console.WriteLine);这应该会显示产品下每个元素的值。如果需要整个元素,请删除.ValueLINQ 查询的 select 子句中的 。更新我现在投射到匿名类型。您将为文件中的每个 Product 元素获得其中一个。var items = from item in dataset.Descendants("Product")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select new&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RefCode = item.Element("RefCode").Value,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Codes = string.Join(", ", item.Elements("SiteCode").Select(x => x.Value)),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Status = item.Element("Status").Value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };Array.ForEach(items.ToArray(), Console.WriteLine);我已将代码展平为逗号分隔的字符串,但您可以根据需要保留IEnumerable或ToList。

烙印99

使用 xml Linq :使用系统;使用 System.Collections.Generic; 使用 System.Linq;使用 System.Text; 使用 System.Xml;使用 System.Xml.Linq;命名空间 ConsoleApplication51 { 类程序 {&nbsp; &nbsp; const string FILENAME = @"c:\temp\test.xml";&nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; XElement doc = XElement.Load(FILENAME);&nbsp; &nbsp; &nbsp; &nbsp; List<Product> products = doc.Descendants("Product").Select(x => new Product()&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; refCode = (string)x.Element("RefCode"),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; siteCode = x.Elements("SiteCode").Select(y => (int)y).ToArray(),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; status = (string)x.Element("Status")&nbsp; &nbsp; &nbsp; &nbsp; }).ToList();&nbsp; &nbsp; }}public class Product{&nbsp; &nbsp; public string refCode { get; set; }&nbsp; &nbsp; public int[] siteCode { get; set; }&nbsp; &nbsp; public string status { get; set; }}}
打开App,查看更多内容
随时随地看视频慕课网APP