1
內的元素,我想提取一個XML文件中的信息(見下面的代碼的特定部分):LINQ - 獲取元素
<AssetsInterface>
<Assets>
<Asset>
<Vehicle>
<MaintenanceHistories>
<MaintenanceHistory>
<RepairDate>2014-07-02</RepairDate>
<Mileage>30692</Mileage>
<Dealer></Dealer>
<Activities>
<Activity>
<Code></Code>
<Description>Filtro de aceite</Description>
<Amount>0</Amount>
</Activity>
<Activity>
<Code></Code>
<Description>Revisión 30000</Description>
<Amount>0</Amount>
</Activity>
</Activities>
</MaintenanceHistory>
<MaintenanceHistory>
<RepairDate>2015-03-27</RepairDate>
<Mileage>63984</Mileage>
<Dealer></Dealer>
<Activities>
<Activity>
<Code></Code>
<Description>Filtro de aceite</Description>
<Amount>0</Amount>
</Activity>
<Activity>
<Code></Code>
<Description>Revisión 60000</Description>
<Amount>0</Amount>
</Activity>
<Activity>
<Code></Code>
<Description>Escobillas</Description>
<Amount>0</Amount>
</Activity>
<Activity>
<Code></Code>
<Description>Filtro de particulas</Description>
<Amount>0</Amount>
</Activity>
</Activities>
</MaintenanceHistory>
</MaintenanceHistories>
</Vehicle>
</Asset>
</Assets>
</AssetsInterface>
正如你可以看到,它有多個<MaintenanceHistory>
與多個<Activities>
它們內部。我找的輸出是這樣的:
2014-07-02 30692 Filtro de aceite
2014-07-02 30692 Revisión 30000
2015-03-27 63984 Filtro de aceite
2015-03-27 63984 Revisión 60000
2015-03-27 63984 Escobillas
2015-03-27 63984 Filtro de partículas
我沒有問題,提取<RepairDate>
和<Mileage>
,甚至我提取<Description>
,但我不能這樣做一次。這是我目前可憐的代碼(X1000不同的嘗試後...):
For Each desc As XElement In document.Descendants("Activity")
carRepairDesc = desc.Element("Description")
For Each options As XElement In document.Descendants("MaintenanceHistory")
carRepairDate = options.Element("RepairDate").Value
carRepairKMs = options.Element("Mileage").Value
Next
Console.WriteLine(carRepairDate & " " & carRepairKMs & "km " & carRepairDesc)
Next
這段代碼的輸出是一個有點不同:
2015-12-28 96833km Filtro de aceite
2015-12-28 96833km Revisión 30000
2015-12-28 96833km Filtro de aceite
2015-12-28 96833km Revisión 60000
2015-12-28 96833km Escobillas
2015-12-28 96833km Filtro de particulas
我希望你有什麼建議!
編輯:
感謝@Hybridzz,這裏是VB.Net的解決方案:
Dim document As XDocument = XDocument.Load("PATH TO XML")
Dim mHistory = From r In document.Descendants("MaintenanceHistory") Select New With {
Key .RepairDate = r.Element("RepairDate").Value,
Key .Mileage = r.Element("Mileage").Value,
Key .ActivityDescs = r.Descendants("Activity").[Select](Function(x) x.Element("Description").Value)
}
For Each r In mHistory
For Each activityDesc In r.ActivityDescs
Console.WriteLine(String.Format("{0} {1} {2} {3}", r.RepairDate, r.Mileage, activityDesc, Environment.NewLine))
Next
Next
它像一個魅力。你拯救我的一天!你能解釋一下代碼嗎?我不明白「mHistory」var部分的工作原理。非常感謝! – smtdev
這就是linq的美妙之處,我們從xml數據動態地創建新對象。'select new'將創建一個新的對象,其中定義了屬性。 – Hybridzz
我會在將來使用它,當然。再次感謝你。 – smtdev