Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 85

Автор Иво Π‘Π°Π»ΠΌΡ€Π΅

β–  МодСли ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ элСмСнтам Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’Π°ΠΌ даСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ "выстрСл", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΏΠ΅Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… чтСния. Если ваш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ нуТдаСтся Π² динамичСском пСрСкрСстном использовании Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ внСсСнии взаимосвязанных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π΄Π°Π½Π½Ρ‹Π΅, относящиСся ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ частям XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ для этого Π²Π°ΠΌ придСтся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ довольно слоТный ΠΊΠΎΠ΄, интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состоянии. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ модСль XML DOM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ хранящССся Π² памяти Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΎΠ½Π° позволяСт Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄ этого Π΄Π΅Ρ€Π΅Π²Π° для поиска Π½ΡƒΠΆΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² ΠΈ внСсСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. 

β–  МодСли ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ выполнСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объСма Ρ€Π°Π±ΠΎΡ‚Ρ‹ для рСконструкции всСй структуры Π΄Π΅Ρ€Π΅Π²Π°. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ вывСсти для записи Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» считан, Ρ‚ΠΎ Π²Π°ΠΌ придСтся ΠΏΡ€ΠΎΠ΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ XML DOM, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ XMLReader ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ приспособлСны для извлСчСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΡ€Ρ†ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ XMLWriter ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ приспособлСны для быстрого Π²Ρ‹Π²ΠΎΠ΄Π° вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов XML-Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΆΠ΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈ внСсти Π² Π½Π΅Π³ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ измСнСния ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Ρ‚ΠΎ ваш Π΄Ρ€ΡƒΠ³ β€” DOM. 

β–  МодСли ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ использования Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΡŽ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ поиска Π² слоТных Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…. НаписаниС ΠΊΠΎΠ΄Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π±Ρ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ иСрархиями XML, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ большиС трудности. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΈΡΠΊΠΎΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π²Π°ΠΌ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ слоТноС состояниС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡƒΠ·Π»Π΅ Π΄Π΅Ρ€Π΅Π²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ. Π’Π°ΠΊ, Ссли Π²Ρ‹ осущСствляСтС поиск дСскриптора <Name>, находящСгося Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ дСскриптора <Customer>, ΠΈ Π² вашСм XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ дСскрипторы <Name>, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ <Customer>, <Employee> ΠΈ <Vendor>, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² XML-Π΄Π΅Ρ€Π΅Π²Π΅ Π½Π° иСрархичСских уровнях Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹, Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ эти случаи ΠΈ Ρ‚Π΅ΠΌ caΠΌΡ‹ΠΌ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π²Π°ΠΌ придСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ, Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² настоящСС врСмя осущСствляСтся просмотр. Если Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ слСдуСт СдинствСнной ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ- ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ схСмС, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΏΠ»ΠΎΡ…ΠΎ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ с использованиСм ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… схСм, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° становится алгоритмичСски слоТной. Π’ случаС особо слоТных Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ выполнСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° сСрвСрС, ΠΈΠ±ΠΎ Ρ‚Π°ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ API-интСрфСйсы, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для провСдСния поиска Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, XPATH, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ запросы Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°).

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ простой ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для чтСния ΠΈ записи прСдставлСнных Ρ€Π°Π½Π΅Π΅ Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ XML- Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² XMLReader ΠΈ XMLWriter. ΠžΡΠΎΠ±Ρ‹ΠΉ интСрСс для вас ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ XMLReader для отслСТивания Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ мСста Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅; Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ для ΡΡ‚ΠΎΠ»ΡŒ простого XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ наш, этот ΠΊΠΎΠ΄ вовсС Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π΅Π½. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этому ΠΊΠΎΠ΄, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для Π²Ρ‹Π²ΠΎΠ΄Π° XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° XMLWriter, отличаСтся простотой.

Листинг 10.3. ИспользованиС ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ чтСния-записи XML-Π΄Π°Π½Π½Ρ‹Ρ… для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈ Π΅Π³ΠΎ сохранСния

using System;

public class SaveAndLoadXML UseReaderWriter {

 //XML-дСскрипторы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅

 const string XML_ROOT_TAG = "AllMyData";

 const string XML_USERINFO_TAG = "UserInfo";

 const string XMI_USERID_TAG = "UserID";

 const string XML_NAMEINFO_TAG = "Name";

 const string XML_FIRSTNAME_TAG = "FirstName";

 const string XML_LASTNAME TAG = "LastName";

 //Набор состояний, отслСТиваСмых ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния Π΄Π°Π½Π½Ρ‹Ρ…

 private enum ReadLocation {

  inAllMyData,

  inUserInfo,

  inUserID,

  inName,

  inFirstName,

  inLastName,

 }

 //--------------------------------------------------------------------

 //БохраняСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ состояниС

 //

 // [in] fileName: Имя Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для сохранСния Π΄Π°Π½Π½Ρ‹Ρ…

 // [in] userId: Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ

 // [in] firstName: Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ

 // [in] lastName: Ѐамилия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ

 //--------------------------------------------------------------------

 public static void XML_SaveUserInfo(string fileName, int userId,string firstName, string lastName) {

  System.Xml.XmlTextWriter xmlTextWriter;

  xmlTextWriter =new System.Xml.XmlTextWriter(fileName, System.Text.Encoding.Default);


  //Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ содСрТимоС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°!

  //<Root>

  xmlTextWriter.WriteStartElement(XML_ROOT_TAG);

  //<Root>

  xmlTextWriter.WriteStartElement(XML_USERINFO_TAG);

  //<Root><UserID>

  //<Root><UserInfo>

  xmlTextWriter.WriteStartElement(XML_NAMEINFO_TAG);

  //<Root><UserInfo><Name>

  xmlTextWriter.WriteStartElement(XML_FIRSTNAME_TAG);

  //<Root><UserInfo><Name><FirstName>

  xmlTextWriter.WriteString(firstName); //Π—Π°ΠΏΠΈΡΡŒ значСния

  xmlTextWriter.WriteEndElement(); //Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор ΠΈΠΌΠ΅Π½ΠΈ

  //<Root><UserInfo><Name>

  xmlTextWriter.WriteStartElement(XML_LASTNAME_TAG);

  //<Root><UserInfo><Name><LastName>

  xmlTextWriter.WriteString(lastName); //Π—Π°ΠΏΠΈΡΡŒ значСния

  xmlTextWriter.WriteEndElement(); //Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ

  //<Root><UserInfo><Name>

  xmlTextWriter.WriteEndElement(); //Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор ЀИО

  //<Root><UserInfo>

  //<Root><UserInfo>

  xmlTextWriter.WriteStartElement(XML_USERID_TAG);

  //<Root><UserInfo><UserID>

  //Π—Π°ΠΏΠΈΡΡŒ значСния

  xmlTextWriter.WriteString(userId.ToString());

  xmlTextWriter.WriteEndElement();

  //Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор UserID

  //<Root><Userlnfo>

  xmlTextWriter.WriteEndElement(); //Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор UserInfo

  //<Root>

  xmlTextWriter.WriteEndElement(); //Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

  //

  xmlTextWriter.Close();

 }


 //--------------------------------------------------------------

 //Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ состояниС

 //

 // [in] fileName: Имя Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для сохранСния Π΄Π°Π½Π½Ρ‹Ρ…

 // [out] userId: Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

 // [out] firstName: Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

 // [out] lastName: ЗагруТСнная фамилия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

 //--------------------------------------------------------------

 public static void XML_LoadUserInfo(string fileName, out int userId, out string firstName,out string lastName) {

  ReadLocation currentReadLocation;

  //НачинаСм с Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

  userId = 0;

  firstName = "";

  lastName = "";

  System.Xml.XmlTextReader xmlReader = new System.Xml.XmlTextReader(fileName);

  xmlReader.WhitespaceHandling = System.Xml.WhitespaceHandling.None;

  bool readSuccess;

  readSuccess = xmlReader.Read();

  if (readSuccess == false) {

   throw new System.Exception("ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ XML-Π΄Π°Π½Π½Ρ‹Π΅ для чтСния!");

  }

  //Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ распознали ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ дСскриптор

  if (xmlReader.Name != XML_ROOT_TAG) {

   throw new System.Exception("ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ дСскриптор отличаСтся ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ!");

  }

  //ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСстополоТСниС Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅

  currentReadLocation = ReadLocation.inAllMyData;

  //------------------------------------------------------

  //Π¦ΠΈΠΊΠ» прохоТдСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

  //------------------------------------------------------

  while (readSuccess) {

   switch (xmlReader.NodeType) {

   //ВызываСтся ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт

   case System.Xml.XmlNodeType.Element: {

    string nodeName = xmlReader.Name;

    LoadHelper_NewElementEncountered(nodeName, ref currentReadLocation);

    break;

   }

   //----------------------------------------------------

   //Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ фактичСский тСкст ΠΈ

   //ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пытаСмся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ

   //----------------------------------------------------

   case System.Xml.XmlNodeType.Text: {

    switch (currentReadLocation) {

    case ReadLocation.inFirstName: {

     firstName = xmlReader.Value;

     break;

    }

    case ReadLocation.inLastName: {

     lastName = xmlReader.Value;

     break;

    }

    case ReadLocation.inUserID: {

     userId = System.Convert.ToInt32(xmlReader.Value);

     break;

    }

    }