为了账号安全,请及时绑定邮箱和手机立即绑定

C# XML 多子级

C# XML 多子级

C#
白猪掌柜的 2021-08-22 17:32:47
美好的一天!我正在尝试使用数据集解析 XML 子子项。问题是当它具有多个值时它不读取“SiteCode”。例如:string filePath = @"" + _clsPathIntervalSttngs.localPath + "/" + "hehe.xml";               DataSet dataSet = new DataSet()dataSet.ReadXml(filePath, XmlReadMode.InferSchema);// Then display informations to testforeach (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 值并选择产品而不是站点代码。我哪里出错了?
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可能需要检查代码,因为我只是拿了一些类似的东西并将其更改为查看您的文档层次结构。我也没有使用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);

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


查看完整回答
反对 回复 2021-08-22
?
烙印99

TA贡献1829条经验 获得超13个赞

使用 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; }

}

}


查看完整回答
反对 回复 2021-08-22
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信