Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Всем здрасьте. А особенно тебе уважаемый All. Прошу минутку внимания и толику терпения. Вопрос собственно в наследовании и расширении XML классов, а конкретнее XmlNode который естественно потребует XmlDocument для нормальной работы. В чем Задача: Хочу перегрузить некоторые бинарные операторы для нодов а именно : <>= и иже сними. В чем Проблема: При попытке создания наследника XMlNode получаю ошибку "'System.Xml.XmlNode.XmlNode()' is inaccessible due to its protection level" и никакого наследства со всеми его перегруженными радостями. Не знаю как там у него с уровнем защиты, но судя по всему публичного конструктора класс XmlNode действительно не имеет, в этом то и загвоздка. В связи с вышеизложенным вопрос: Можно ли и если да то "КАК?" решить Проблему для получения удовольствия от решения Задачи? Сталкивался ли кто из уважаемых коллег с подобной казуистикой? Какой возможен workaround? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 20:46 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
А Магнуса ближе к ночи терзал страшный дух XML'a ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 22:09 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Он меня терзает уже давненько со времен нелегкого 10 октября, когда я вступил в бой "За Сравнение". Стороны, обменявшись предварительными ударами отошли на исходны позиции.\r Мною же, было решено сделать подкоп и взять врага изнутри, чем и занялся.\r Сейчас заканчиваю предварительную стадию, а именно сортировку нодов и детей оных.\r \r Не такой уж он и страшный, энтот дух, если приглядеться :).\r \r Подскажешь чего нить из секретного оружия?\r \r \r Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2003, 22:52 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Знач так. Враг сдал позиции и трусливо бежит(кто бы сомневался, ха!). Наследство я таки получил. И по заведенным, еще древними славянами, правилам, публикую решение дабы помочь в нелекгом бою братьям по оружию. Код: plaintext 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. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. Все. Дрюм! Предлагаю занести это решение куда нить в Фак, не столько из моей природной сркомности и застенчивости сколько из заботы о ближних. Так как судя по всему у многих здешних обитателей серьезные проблемы с XML, вот мне к примеру, так никто и не ответил. Одобрям? :) ЗЫ Если кому чего непонятно, прошу задавать вопросы докладчику пока он не ушел в запой или на работу. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 14:19 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Походу прийдется также расширять все(или только некоторые, в зависимости от структуры XML документа) классы производные от XmlNode и XmlLinkedNode. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 15:08 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Sizhik писал: Походу прийдется также расширять все(или только некоторые, в зависимости от структуры XML документа) классы производные от XmlNode и XmlLinkedNode. Думаю не придется. Ведь в моем примере расширен не XmlNode а XmlElement от которого наследуют и нод и линкед нод. Т.е. они уже "мои". Не скажу что все теперь гладко, конечно нет. Подводные камни есть всегда. Майкрософт вообще не рекомендует наследовать классы ХМЛ и конкретно нод. Вот например, у меня в коде был использован нодлист, и т.к. он в принципе не является дочерним элементом документа то и возвращал он не "мои" ноды а обычные, тут уж надо бы перегрузить и ChildNodes, но пока обошелся простым конвертированием, хотя в идеале думаю сделать. Конечно, смотреть надо уже по конкретному случаю, что расширять а что нет. У меня цель была, перегрузить некоторые операторы и далее работать как обычно. Для нее подобный код вполне подходит. Это подкоп под XmlNode, не под сам документ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 15:50 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Magnus23 писал: ...Ведь в моем примере расширен не XmlNode а XmlElement от которого наследуют и нод и линкед нод. Т.е. они уже "мои"... Хм, странно, дока па .НЕТ-у отзывается о XmlElement в диаметрально противоположном направлении: Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 16:20 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Действительно странно. Особенно если учесть что из невиртуальных методов у документа есть только CreateElement... который и был перегружен. Хм... Если верить доке(а придется) то в любом случае проблемы быть не должно, он наследник линкед нода а значит полностью совместим. Кстати за время рабты с XML еще не разу напрямую не работал с классом линкед нод, поэтому в принципе не вижу препятствия. Думаю личше решать проблемы по мере их возникновения, потому как с такими темпами, ради нескольких перегрузок, скоро будем наследовать половину DOM'a :) Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2003, 16:38 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Magnus23 писал: Действительно странно. Особенно если учесть что из невиртуальных методов у документа есть только CreateElement... который и был перегружен. Может я чего-то не понимаю, но в твоем примере как раз был переопределен виртуальный метод. К тому же в XmlDocument помимо CreateElement существует набор виртуальных методов CreateXXX которые вызываются при загрузке XML-я в XmlDocument(проверено посредством декомпилирования System.Xml.dll). Теперь вернемся к проблеме наследования XmlNode. Проблема фактически не решаемая поскольку у XmlNode есть два internal конструктора(доступность лимитирована рамками текущего проэкта, в данном случае этот проэкт .NET Framework). С другой стороны, такая ситуация вполне понятна поскольку класс XmlNode не используется на прамую, а является базовым и содержит набор функциональности общей для всего набора классов более высокого уровня. Возможным решением проблемы является наследование ряда классов более высокого уровня, как-то XmlElement, XmlText, XmlAttribute и т.д. Кол-во классов требуемых для наследования зависит от сложностью структуры используемого XML-я. Простой пример, имеем довольно таки тривиальный XML: Код: plaintext 1. Лоадим этот XML в XmlDocument, при этом на событие OnNodeInserted ставим обработчик и смотрим на тип вставляемых нод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Node.NodeType фактичекски показывает какой из наследников XmlNode вставляется в XmlDocument. В общем без переопределения половины DOM-а я так понимаю ничего не выйдет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2003, 12:09 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Sizhik писал:Может я чего-то не понимаю, но в твоем примере как раз был переопределен виртуальный метод Упс. Моя ошибка. Действительно, у меня был переопределен виртуальный метод. Тем не менее эыто работает, в моем примере, после загрузки, документ состоит именно из моих элементов и перегруженные операторы прекрасно работают. Sizhik писал: В общем без переопределения половины DOM-а я так понимаю ничего не выйдет. :) Для глобального случая - да. Нужно расширять довольно много классов чтобы покрыть все. Нов моем конкретном случае вполне достаточно нодов. Эту часть я практически закончил. Все работает, только вот атрибут расширять поленился, да и не особо нужно было, сделал проседуркой. :) Согласен, я сам сначала немного запутался в нем. Никогда не вникал глубоко в структуру. При ближайшем рассмотрении обнаружил: существует 2 не виртуальных CreateElement и несколько виртуальных CreateXXX, прямо относящихся к нашему вопросу.Мой - верхний. Невиртуальные в конце с "new". Код: plaintext 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. Т.е. по идее переопределять нужно, действительно, последние два не виртуальных метода, чтобы получить контроль над остальными, так? Но мой тоже работает, только для нодов и их детей. Значит сам документ использует именно этот метод? Кстати, впомнил почему я занялся именно им, эта инфа как раз с майкрософта, в их примере был переопределен именно этот, вот я и подумал что по логике он должен быть единственным не виртуалным. Опять парят мозги простым людям ? :) Кстати, все эти операторы я выкопал с помощью одной хорошей тулзы : Inherited Class Skeleton Generator. Генерирует он "так себе" но для просмотра внутренностей вполне годится :). Тулза фревая, где сам достал не помню, в гугле искал, ссылок валом, свободно скачивается. Эх. Учиться нам еще и учиться. ПО крайней мере мне :) Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2003, 15:10 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Для декомпилинга использую Anakrino . Выдает на 90% удобочитаемый C#-ский код. Стек-трейс для лоада документа(если юзать декомпилер, поскольку XmlLoader приватный класс): XmlDocument.Load(string) XmlDocument.Load(XmlReader) XmlLoader.Load(XmlDocument, XmlReader, bool) XmlLoader.LoadDocSequence(XmlDocument) XmlLoader.LoadCurrentNode() <- тебе нужна именно это функция, в ней вызываются CreateXXX методы XmlDocument-а Magnus23 писал: Эх. Учиться нам еще и учиться.... Согласен с тодой на все сто :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2003, 17:04 |
|
||
|
Наследство XML
|
|||
|---|---|---|---|
|
#18+
Есть у меня Anakrino, хорошая штука, полезная, но пока мало им пользовался, времени нет на изыски, все колбашу... :) Значит ноды создаются вызовами из LoadCurrentNode? Надо будет глянуть. Я с тим всем ковырянием нашел другой путь решения своей проблемы(ну эт всегда так :) ), без переопределения классов и операторов. Более удобный и компактный. НО! Опыт полученный в результате данных подкопов весьма ценен :) Когда нить пригодится. Может и не нам :) Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2003, 18:14 |
|
||
|
|

start [/forum/topic.php?fid=20&fpage=1044&tid=1439904]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 418ms |

| 0 / 0 |
