Linq到XML为每个特定元素创建1条记录

本文关键字:元素 创建 1条 记录 XML Linq | 更新日期: 2023-09-27 18:06:22

这是一个XML元素"inspection"与子元素"driver", "vehicle"answers"violation",我需要属性值。我需要为每个检查创建一条记录,该记录还包含其他元素的属性值。

<inspection inspection_date="2012-07-08" report_state="IL" report_number="ILP4E1014879" level="1" time_weight="1">   
<driver first_name="MELVIN" last_name="DANIELS" date_of_birth="1976-12-20" license_state="IL" License_number="D8505003"></driver>
<vehicle vehicle_id_number="1HSCNAPR74C501842" unit_type="Truck Tractor" license_state="IL" license_number="1234567"></vehicle>
<violations>
<violation code="122.4B2C" description="Lights" oos="N" basic="Vehicle Maint." severity_weight="4"></violation>
</violations>
</inspection>

下面是一个片段:

                dotinspections = from el in inspectionList
                                 select el;
                foreach (var el in dotinspections)
                {
                    if (el.Attribute("inspection_date") != null && el.Attribute("inspection_date").Value != null)
                    { insDate = Convert.ToDateTime(el.Attribute("inspection_date").Value); }
                    state = el.Attribute("report_state") != null && (string)el.Attribute("report_state").Value != null ? el.Attribute("report_state").Value.Replace("'", "''") : null;
                    insNumber = el.Attribute("report_number") != null && el.Attribute("report_number").Value != null ? el.Attribute("report_number").Value.Replace("'", "''") : null;
                    if (el.Attribute("level") != null && el.Attribute("level").Value != null)
                    { insLevel = Convert.ToInt32(el.Attribute("level").Value); }

这些都在IEnumerable "dotinspections"中。我已经尝试了几乎所有的方法使用。elements,。descendants,。attributes等。,但只能得到一份检查记录,然后是司机记录,然后是车辆记录等。,而不是每次全检只记录一次。

每次检查如何得到一份记录?

Linq到XML为每个特定元素创建1条记录

经验教训-谢谢webdad3。我没有发布我所有的代码(为了简洁)。问题在于我没有深入研究嵌套的xelement。我需要添加"违规"answers"车辆"以及其他祖先属性:

                    licenseNumber1 = el.Element("vehicle").Attribute("license_number") != null && el.Element("vehicle").Attribute("license_number").Value != null ? el.Element("vehicle").Attribute("license_number").Value.Replace("'", "''") : null;
                    code = el.Element("violations").Element("violation").Attribute("code") != null && el.Element("violations").Element("violation").Attribute("code").Value != null ? el.Element("violations").Element("violation").Attribute("code").Value.Replace("'", "''") : null;
                    description = el.Element("violations").Element("violation").Attribute("description") != null && el.Element("violations").Element("violation").Attribute("description").Value != null ? el.Element("violations").Element("violation").Attribute("description").Value.Replace("'", "''") : null;