Mam mały problem z odczytaniem informacji z pliku xml ...Czytaj xml z pliku
Plik przekazany do mnie ma tysiące linii. Interesowało mnie tylko 300 - 400 z tych linii. Nie muszę zapisywać żadnych danych z powrotem do xml, gdy użytkownik zakończy swoją operację, a dane do odczytania można przechowywać w postaci List<string>
.
Znalazłem rozwiązania w Internecie za pomocą XmlTextReader
, aby odczytać dane. Więc nie musiałbym tworzyć klasy i używać Serializera. Ale wygląda na to, że użyłem niewłaściwego kodu XmlTextReader
. Może mi pomóc ...
ten sposób xml wygląda następująco:
<?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>
Jestem zainteresowany tylko w Value
najbardziej wewnętrzne elementy imię (pierwsze dwa byłyby "098-0031" i "098-0032").
I to jest mój kod:
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;
}
}
Ale warunek jest spełniony reader.Name == "Children"
nigdy ... Czy ktoś może mi wyjaśnić dlaczego. A może pokaże mi łatwy sposób przechowywania tych wartości w List<string>
? Z góry dziękuję!
EDYCJA: Edytowałem xml. Przepraszam za to, ale jest naprawdę ciężko, aby filtrować unnecassary części mylące z mojego xml ...
Czy można używać innych, takich jak 'Linq2XML'? –
@SkyFang Absolutnie możliwe – user3596113