Nejčastěji odpovídající uživatel
Problém s XmlTextReader.Read()

Dotaz
-
Ahoj.. mám následující kód:
System.Xml.XmlTextReader xr = new System.Xml.XmlTextReader(f + ".xml"); while (xr.Read()) { if (xr.NodeType == System.Xml.XmlNodeType.Element || xr.NodeType == System.Xml.XmlNodeType.EndElement) { if (xr.Name.ToLower() == "title") MessageBox.Show(xr.Name, xr.NodeType + ""); // zde testuji, zda je vůbec EndElement elementu Title dostupný bool start = xr.IsStartElement(); switch(xr.Name.ToLower()) { case "title": if (xr.IsStartElement()) { MessageBox.Show(xr.ReadString()); } else { MessageBox.Show("Konec elementu title"); // toto se nikdy nezobrazí, dokud nezruším xr.ReadString() } break; } } } xr.Close(); }
Problém spočívá v tom, že při použití metody ReadString() mi třída XmlTextReader nevrací nody typu EndElement a já nemohu na to přijít proč. Zkoušel jsem si kód vytvořit znovu, ale pořad to dělalo stejný problém. Nesetkal se s tím někdo?
Díky moc.
Odpovědi
-
Podle dokumentace metoda ReadString() načte obsah elementu jako text, přičemž načítání textu zastaví, jakmile narazí na další značku, což může být komentář, instrukce nebo koncová značka: This could occur in a mixed content model, or when an element end tag is read. Takže při volání metody xr.ReadString() se zároveň načte i koncový element a při volání xr.Read() se načte úsek bez prostředně následující za koncovou značkou.
Můžete to zjistit tak, když po zavolání xr.ReadString() zkontrolujete, jaký typ elementu nyní XmlTextReader zpracovává: bude to EndElement se jménem "title".
Boris Lehečka (Word, VBA, XML, C#, SQL)- Upravený Boris Lehečka neděle 23. května 2010 16:36 Opravy překlepů v názvech metod
- Označen jako odpověď Robert HakenMVP, Moderator pondělí 24. května 2010 19:21
-
Ke zjištění, v jaké části dokumentu se XmlReader po zavolání metody ReadString() zrovna nachází (jestli je na konci téhož elementu nebo na začátku vnořeného), použijte hodnoty vlastností xr.NodeType a xr.Name .
Ze všeho nejvíc ale záleží na tom, čeho chcete dosáhnout, k čemu má daný kód sloužit. Jestli jde jenom o načtení textu (stačilo by odchytávat xr.NodeType == XmlNodeType.Text ), o text a informace o počátečních a koncových značkách, jestli je potřeba zpracovávat atributy atp. Rovněž záleží na tom, jakou strukturu (DTD, XML Schema) může zpracovávaný dokument XML mít.
Boris Lehečka (Word, VBA, XML, C#, SQL)- Označen jako odpověď Robert HakenMVP, Moderator pondělí 24. května 2010 19:21
Všechny reakce
-
Podle dokumentace metoda ReadString() načte obsah elementu jako text, přičemž načítání textu zastaví, jakmile narazí na další značku, což může být komentář, instrukce nebo koncová značka: This could occur in a mixed content model, or when an element end tag is read. Takže při volání metody xr.ReadString() se zároveň načte i koncový element a při volání xr.Read() se načte úsek bez prostředně následující za koncovou značkou.
Můžete to zjistit tak, když po zavolání xr.ReadString() zkontrolujete, jaký typ elementu nyní XmlTextReader zpracovává: bude to EndElement se jménem "title".
Boris Lehečka (Word, VBA, XML, C#, SQL)- Upravený Boris Lehečka neděle 23. května 2010 16:36 Opravy překlepů v názvech metod
- Označen jako odpověď Robert HakenMVP, Moderator pondělí 24. května 2010 19:21
-
-
Ke zjištění, v jaké části dokumentu se XmlReader po zavolání metody ReadString() zrovna nachází (jestli je na konci téhož elementu nebo na začátku vnořeného), použijte hodnoty vlastností xr.NodeType a xr.Name .
Ze všeho nejvíc ale záleží na tom, čeho chcete dosáhnout, k čemu má daný kód sloužit. Jestli jde jenom o načtení textu (stačilo by odchytávat xr.NodeType == XmlNodeType.Text ), o text a informace o počátečních a koncových značkách, jestli je potřeba zpracovávat atributy atp. Rovněž záleží na tom, jakou strukturu (DTD, XML Schema) může zpracovávaný dokument XML mít.
Boris Lehečka (Word, VBA, XML, C#, SQL)- Označen jako odpověď Robert HakenMVP, Moderator pondělí 24. května 2010 19:21