You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XML解析存入DataTable时数据全在单列,如何按类分列存储?

XML解析到DataTable的列映射问题

问题说明

解析XML文件并存入DataTable时,所有数据都被存储到同一列中,需要实现每个字段对应DataTable的一列。尝试直接解析到DataTable返回空结果,转而先将数据存入实体类再转换到DataTable是可行方案,但不清楚指定列插入的语法。

问题已由@jdweng解决,若遇到Value cannot be null. (Parameter 'element')错误,可尝试使用语句:

int EventID = (int)xEvent.Descendants("EventID").FirstOrDefault();

代码示例

using (XmlReader reader = XmlReader.Create(@"C:\Users\neyma\test/W.xml"))
{
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("EventID");
    dataTable.Columns.Add("Computer");
    dataTable.Columns.Add("TargetUserName");
    dataTable.Columns.Add("TargetDomainName");
    
    while (reader.Read())
    {
        if (reader.IsStartElement())
        {
            switch (reader.Name.ToString())
            {
                case "EventID":
                    data.EventID= reader.ReadInnerXml();
                    dt.Rows.Add(data.EventID);
                    break;
                case "Computer":
                    data.Computer= reader.ReadInnerXml();
                    dt.Rows.Add(data.Computer);
                    break;
                case "Data":
                    if (reader.GetAttribute("Name") == "TargetUserName")
                        data.TargetUserName= reader.ReadInnerXml();
                        dt.Rows.Add(data.TargetUserName);
                    else if (reader.GetAttribute("Name") =="TargetDomainName")
                        data.TargetDomainName= reader.ReadInnerXml();
                        dt.Rows.Add(data.TargetDomainName);
                    break;
            }
        }
    }
Console.WriteLine(string.Join("\r\n", dt.Rows.Cast<DataRow>().Select(r => string.Join(", ", r.ItemArray))));
}

当前输出

5136, , , , , , , , , , , , , , , , , , , , ,
851215101, , , , , , , , , , , , , , , , , , , , ,
5136, , , , , , , , , , , , , , , , , , , , ,
851215100, , , , , , , , , , , , , , , , , , , , ,
...

期望输出

5136, 851215098, , , , , , , , , , , , , , , , , , , ,
851215101, 5136, , , , , , , , , , , , , , , , , , , ,
...

XML示例

<eventxml>
<Event><EventID>36</EventID><Computer>NH</Computer><EventData><Data Name="TargetUserName">TER.go</Data><Data Name="TargetDomainName">%4</Data></EventData></Event>
<Event><EventID>51</EventID><Computer>NQ-RS1-.ov</Computer><EventData><Data Name="TargetUserName">TERMSRiv</Data><Data Name="TargetDomainName">%%4</Data></EventData></Event>
<Event><EventID>536</EventID><Computer>CRS1.ov</Computer><EventData><Data Name="TargetUserName">TERRov</Data><Data Name="TargetDomainName">%%144</Data></EventData></Event>
</eventxml>

内容的提问来源于stack exchange,提问作者call out my name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:48:17