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

时间:2014-06-02 19:17:07

标签: c# xml linq

这是一个XML元素"检查"与儿童元素"司机","车辆"和"违反",我需要属性值。 我需要为每个检查创建一条记录,该记录还包含其他元素的属性值。

<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&#34; dotinspections&#34;中。我已经尝试了几乎所有使用.Elements,.Descendants,.Attributes等的方法,但只能获得检查记录,然后是驱动程序记录,然后是车辆等等,而不是每次完整检查的一条记录。

每次检查我如何获得一条记录?

1 个答案:

答案 0 :(得分:0)

获得的经验 - 感谢webdad3。 我没有发布我的所有代码(为了简洁起见)。问题是我没有深入到嵌套的XElements。我需要添加&#34;违规行为&#34;和&#34;车辆&#34;和我的属性的其他祖先:

                    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;