Ho un piccolo problema con la lettura di informazioni da un file xml ...Leggi xml dal file
Il file passato a me ha migliaia di righe. Sono interessato solo a 300 - 400 di quelle linee. Non è necessario scrivere alcun dato su xml quando l'utente ha terminato la sua operazione e i dati da leggere possono essere memorizzati in un List<string>
.
Ho trovato soluzioni in rete utilizzando XmlTextReader
per leggere i dati. Quindi non dovrei creare una classe e usare un serializzatore. Ma mi sembra im usando il XmlTextReader
sbagliato. Forse mi può aiutare ...
Questo è come l'XML assomiglia:
<?xml version="1.0" encoding="utf-8"?>
<ProjectConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi="http://www.w3.org/2001/XMLSchema-instance">
<ProjectLists xmlns="...">
<ProjectList>
... // not interested in this data
</ProjectList>
<ProjectList>
<ListNode>
<Name>Test_Environment</Name>
<Children>
<ListNode>
<Name>yyy</Name>
<Children>
<ListNode>
<Name>205 (ST)</Name>
<Children>
<ListNode>
<Name>098-0031</Name>
<Children />
</ListNode>
<ListNode>
<Name>098-0032</Name>
<Children />
</ListNode>
//more ListNodes...
</Children>
</ListNode>
<ListNode>
<Name>old</Name>
<Children>
<ListNode>
<Name>W098-32</Name>
<Children />
</ListNode>
</Children>
</ListNode>
</Children>
</ListNode>
<ListNode>
<Name>xxx</Name>
<Children />
</ListNode>
<ListNode>
<Name>098-0001</Name>
<Children />
</ListNode>
<ListNode>
<Name>098-0011</Name>
<Children />
</ListNode>
// More List Nodes
</Children>
</ListNode>
<ListNode>
// more List Nodes
</ListNode>
</ProjectList>
<ProjectList>
//more uninteresting ProjectLists...
</ProjectList>
Mi interessa solo in Value
degli Elementi nome più interne (le prime due sarebbe "098-0031" e "098-0032").
E questo è il mio codice:
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:
{
if (reader.Name == "Name") {
reader.Read();
if (reader.Value == "Test_Environment") {
reader.ReadToDescendant("Children");
if (reader.Name == "Children") {
reader.ReadToDescendant("Children");
}
}
}
}
break;
}
}
Ma la condizione reader.Name == "Children"
è mai esaudito ... Qualcuno può spiegarmi perché. E magari mostrarmi un modo semplice per memorizzare quei valori in un List<string>
? Grazie in anticipo!
MODIFICA: ho modificato il xml. Ci scusiamo per questo, ma la sua davvero difficile filtrare le parti confuse unnecassary dal mio xml ...
È possibile utilizzare altri come 'Linq2XML'? –
@SkyFang Assolutamente possibile – user3596113