|
Работа с XML из c# для перловика
|
|||
---|---|---|---|
#18+
Обычно, если я что-то админю, то это линуха или MSSQL. И обычно для задач администрирования хостов у меня есть perl. Но в этот раз помимо того, что приходится решать задачу на Win, так еще и в итоге нужно собрать .exe для вызова из командной строки. Поскольку для подобных задач в тренде нынче c# (и потому, что мне давно хотелось его пощупать), решать задачу хочу на нем. Возьмем такой XML: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
1. С точки зрения Perl мы можем легко и быстро (спасибо модулям) преобразовать этот XML во внутреннюю структуру данных. Так: Код: perl 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
В итоге в $ref возвращается содержимое XML в виде структуры данных perl (массивы [value0, value1, ..., valueN] и хеши {key1 => value1, ..., keyN => valueN}: Код: perl 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
2. Если нам нужно значение GUID из XML - это тоже просто: Код: perl 1.
3. Аналогично присвоив $ref->{'Info'}->{'Guid'} нужное значение мы можем поменять значение GUID в XML: Код: perl 1. 2. 3.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Вот эти 3 пункта достаточно просты в Perl, но я так не смог найти простой реализации того на c#, прошу помощи у сообщества. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 22:54 |
|
Работа с XML из c# для перловика
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
Консольный вывод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 05:58 |
|
Работа с XML из c# для перловика
|
|||
---|---|---|---|
#18+
P.S. Перл для windows вполне себе тоже существует: http://www.perl.org/get.html#win32 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 06:00 |
|
Работа с XML из c# для перловика
|
|||
---|---|---|---|
#18+
On1yMe, в дотнете есть несколько способов работы с xml. Класс XmlDocument (пример с которым привёл Сон Веры Павловны) - он реализует модель W3C DOM - она должна быть знакома каждому веб-программисту. Классы XDocument/XElement - великий и ужасный LINQ, о котором, вероятно, слышали все, даже никогда не работавшие с технологиями .NET и вообще MS. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Также можно работать с набором классов, используя сериализацию-десериализацию. Для приведённого xml напишем следующие классы: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Прочитать данные в них можно так: Код: c# 1. 2. 3. 4. 5. 6. 7.
Т. к. C# статически типизированный, то приходится заранее создавать эти классы. В динамике, конечно, проще. Этот подход удобен тем, что мы получаем строго типизированные классы - это даёт автоподсказки в IDE при вводе кода, избавляет от случайных опечаток в строковых значениях имён узлов и т. п. Можно не писать классы вручную, а воспользоваться утилитой xsd.exe (входит в состав Visual Studio): скармливаем ей данный xml, получаем схему xsd, далее получаем набор классов (с кучей сгенерированных атрибутов). Есть и другие способы: потоковый api, классы для использования xslt, загрузка xml в датасеты (если данные представляют табличные данные), использование скомпилированных xpath-выражений... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:55 |
|
Работа с XML из c# для перловика
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныP.S. Перл для windows вполне себе тоже существует: http://www.perl.org/get.html#win32 Использую strawberryperl , без проблем поставил XML::LibXML, XML::LibXSLT (даже под х64). 2On1yMe, а почему именно exe фаил, в чем различие запуска из командной строки в linux и windows? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 10:34 |
|
|
start [/forum/topic.php?fid=14&fpage=14&tid=1332399]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 304ms |
total: | 461ms |
0 / 0 |