首页 > 解决方案 > C# XML 多个子子项

问题描述

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

例如:

在此处输入图像描述

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();
     }
}       

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

在此处输入图像描述

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

我哪里做错了?

标签: c#xml

解决方案


您可能需要检查代码,因为我只是拿了一些类似的东西,然后将其更改为查看您的文档层次结构。我也没有使用DataSet. 考虑以下代码:

var filePath = "<path to your file.xml>";
var xml = XDocument.Load(filePath);

var items = from item in xml.Descendants("Product").Elements()
            select item.Value;
Array.ForEach(items.ToArray(), Console.WriteLine);

这应该向您显示产品下每个元素的值。如果您想要整个元素,请删除.ValueLINQ 查询的 select 子句中的 。

更新

我现在投影到匿名类型。对于文件中的每个 Product 元素,您将获得其中之一。

var items = from item in dataset.Descendants("Product")
            select new
            {
                RefCode = item.Element("RefCode").Value,
                Codes = string.Join(", ", item.Elements("SiteCode").Select(x => x.Value)),
                Status = item.Element("Status").Value
            };
Array.ForEach(items.ToArray(), Console.WriteLine);

我已将代码展平为逗号分隔的字符串,但您可以根据需要保留IEnumerableor ToList


推荐阅读