Unë kam të bëj me një skedar XML që ka një strukturë shumë të mbivendosur:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Stuff>
<Item Class="Consumable">
<CalledAs>ResourceAlpha</CalledAs>
<ID>ResourceAlpha25367</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceAlpha</CalledAs>
<ID>ResourceAlpha25368</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceAlpha</CalledAs>
<ID>ResourceAlpha25371</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceAlpha</CalledAs>
<ID>ResourceAlpha25372</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceBeta</CalledAs>
<ID>ResourceBeta25376</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceBeta</CalledAs>
<ID>ResourceBeta25377</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceBeta</CalledAs>
<ID>ResourceBeta25381</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceBeta</CalledAs>
<ID>ResourceBeta25384</ID>
</Item>
<Item Class="Consumable">
<CalledAs>ResourceBeta</CalledAs>
<ID>ResourceBeta25388</ID>
</Item>
<Item Class="Construct">
<Named>ClosedFolders</Named>
<ID>ClosedFolders25393</ID>
<StorageCabinet>(102, 0, 94)</StorageCabinet>
<AssignedTo>Colonist</AssignedTo>
<Assigned Class="Consumable">
<CalledAs>ResourceBeta</CalledAs>
<ID>ResourceBeta25238</ID>
</Assigned>
</Item>
<Item Class="Construct">
<Named>ClosedFolders</Named>
<ID>ClosedFolders25394</ID>
<StorageCabinet>(105, 0, 95)</StorageCabinet>
<AssignedTo>Colonist</AssignedTo>
</Item>
<Item Class="Construct">
<Named>ClosedFolders</Named>
<ID>ClosedFolders25395</ID>
<StorageCabinet>(103, 0, 92)</StorageCabinet>
<AssignedTo>Colonist</AssignedTo>
<Assigned Class="Consumable">
<CalledAs>ResourceAlpha</CalledAs>
<ID>ResourceBeta45232</ID>
</Assigned>
</Item>
</Stuff>
</Root>
Tani, më duhet të marr një listë me të gjitha ID
në mënyrë që kur të shtoj një Consumable
ose Assigned
të ri, të mund të gjeneroj (dhe të sigurohem që është një ID e re unike).
Ja se si po ngarkoj skedarin:
String savefile = Settings.Default.SelectedSaveFilePath;
var xmlDocument = new XmlDocument();
xmlDocument.Load(savefile);
var selectSingleNode = xmlDocument.SelectSingleNode("/Root/Stuff/Item[@Class='Consumable']");
if (selectSingleNode != null)
{
// Attempt to loop
}
Tani, në nivelin e /Root/Stuff/Item[@Class='Consumable']
, jam i mirë për të marrë <ID>
, por ka një fole në /Root/Stuff/Item[@Class='Construct']
që kërkon një lloj nën-për-secili për të marrë <ID>
të <Assigned Class="Consumable">
Po përpiqem të gjeneroj një listë të të gjitha nyjeve <ID>
në të gjithë dokumentin dhe nëse është e mundur, një Koleksion i Vlerës së Çelës ku <ID>
është vlera dhe Elementi (nga të cilit <ID>
i përket) si çelës.
Unë gjithashtu e di se <ID>
janë unike në dokument, pavarësisht nga prindi i tyre. Kështu që unë mund të gjej drejtpërdrejt çdo element duke kërkuar vetëm ID-në.
Shpresoj që kjo të ketë më shumë kuptim.
Faleminderit.
var xmlDocument = new XmlDocument();
xmlDocument.Load(savefile);
D.m.th., duke mos përdorurXDocument
? 29.01.2014LINQ to XML
është më i mirë dhe i lehtë për t'u përdorur 29.01.2014