C#XML多个子子级

时间:2018-06-20 09:07:42

标签: c# xml

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

例如:

enter image description here

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

这就是它的返回结果。

enter image description here

返回0值,然后选择产品而不是站点代码。

我哪里出错了?

2 个答案:

答案 0 :(得分:0)

您可能必须检查代码,因为我只是采取了一些类似的方法,并更改了代码以查看您的文档层次结构。我也没有使用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);

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

更新

我现在打算使用匿名类型。对于文件中的每个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);

我已将代码拼合为逗号分隔的字符串,但是您可以根据需要保留IEnumerableToList

答案 1 :(得分:0)

使用xml Linq:

使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用System.Text; 使用System.Xml; 使用System.Xml.Linq;

命名空间ConsoleApplication51 {     班级计划     {

    const string FILENAME = @"c:\temp\test.xml";
    static void Main(string[] args)
    {
        XElement doc = XElement.Load(FILENAME);

        List<Product> products = doc.Descendants("Product").Select(x => new Product()
        {
            refCode = (string)x.Element("RefCode"),
            siteCode = x.Elements("SiteCode").Select(y => (int)y).ToArray(),
            status = (string)x.Element("Status")
        }).ToList();



    }

}
public class Product
{
    public string refCode { get; set; }
    public int[] siteCode { get; set; }
    public string status { get; set; }
}

}