C#XML多个子孩子

C#XML多个子孩子,c#,xml,C#,Xml,你好!我正在尝试使用dataset解析XML子孩子。问题是当“站点代码”有多个值时,它不会读取 例如: string filePath=@“++”clspatthintervalstngs.localPath++“/”+“hehe.xml”; 数据集=新数据集() ReadXml(文件路径,XmlReadMode.InferSchema); //然后显示要测试的信息 foreach(dataSet.Tables中的DataTable表) { 控制台写入线(表); 对于(int i=0;i(in

你好!我正在尝试使用dataset解析XML子孩子。问题是当“站点代码”有多个值时,它不会读取

例如:

string filePath=@“++”clspatthintervalstngs.localPath++“/”+“hehe.xml”;
数据集=新数据集()
ReadXml(文件路径,XmlReadMode.InferSchema);
//然后显示要测试的信息
foreach(dataSet.Tables中的DataTable表)
{
控制台写入线(表);
对于(int i=0;i
这就是它正在回归的东西

它返回0值并选择产品而不是sitecode


我哪里出错了?

您可能必须检查代码,因为我只是取了一些类似的东西,然后将其更改为查看您的文档层次结构。我也没有使用
数据集
。考虑下面的代码:

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);
我已将代码展平为逗号分隔的字符串,但您可以根据需要保留
IEnumerable
ToList
字符串。

使用xml Linq:

使用制度; 使用System.Collections.Generic; 使用System.Linq; 使用系统文本; 使用System.Xml; 使用System.Xml.Linq

命名空间控制台应用程序51 { 班级计划 {

const string FILENAME=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XElement doc=XElement.Load(文件名);
列出产品=文档子体(“产品”)。选择(x=>新产品()
{
refCode=(字符串)x.Element(“refCode”),
siteCode=x.Elements(“siteCode”)。选择(y=>(int)y)。ToArray(),
状态=(字符串)x.Element(“状态”)
}).ToList();
}
}
公共类产品
{
公共字符串refCode{get;set;}
public int[]站点代码{get;set;}
公共字符串状态{get;set;}
}

}

尝试将xml作为文本发布(并对其进行格式化。如果您在此处对其进行了编辑,则可以删除这些xml名称空间),因为复制和粘贴这些名称空间以便于检查。事实上,有人将不得不键入xml,而获得解决方案需要更多的时间,而且大多数人都不会这样做。“使用数据集”-为什么,这是一个困难的要求?因为它是旧的,不能接受所有xml表单。如果使用数据集是旧的。您认为有什么比上述函数更好?方法是创建两个表。站点代码结果在表[1]中。您好!如何获取元素Refcode中的值?字符串a=items.ToArray()。。。。;您只需要参考代码吗?还是全部?出现的第一个值应该是refcode。让我做一些修改,然后再给你回复。@AngeloSanchez我已经根据你指定的内容更新了代码。效果非常好!谢谢你好这对我来说很好,但是我如何在它内部循环以获得xml中所需的所有数据呢?我更新了代码以给出一个列表。没有看到完整的xml,我无法给出一个答案,因为我不知道“所有数据”是什么意思。解析xml的方法有很多,具体取决于xml文件的大小、xml的结构以及需要提取的数据量,这取决于最佳使用的方法。
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);
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);
    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; }
}