|
|
|
В xsd указать вхождение элемента в элемент на любой глубине
|
|||
|---|---|---|---|
|
#18+
Задача (упрощенная от реальной): -> в метод передаем параметром html страницы <- из метода возвращаем StringCollection из строк Имя_Формы + Имя_Input'а Представим себе html обычной страницы: есть нода body в которой есть нода form (которая может быть не сразу в body а вложена в td которая вложена в tr которая в table и так сколько угодно раз), а в form'е есть нода input (которая тоже может быть влодена не как child а как child child'а — тоже ведь могут быть таблицы, дивы) Хочется получить класс page в котором будет массив form в котором массив input Я думал сделать схему и сгенерить xsd.exe набор классов, но начав делать понял что сложное вхождение (форма входит не сразу в body а вложена в td которая вложена в tr которая в table и так сколько угодно раз) я не могу задать на схеме Да, конечно, имея html можно обойтись обычными XPath (они очень даже просты), пробежаться по всем формам, а внутри формы пробежаться по всем инпутам, а можно вообще примитив — регекспами. Но дума просит красоты, а чем то задним чую, что красота близко. Красоту вижу так: -На этапе програмирования (тоесть сейчас) я описал схему (именно то что я и ищу) -Дальше сгенерил классы page в котором массив form в котором массив input (каждый из классов с нужными мне аттрибутами) Все! Это сделал один раз! Теперь к задаче: в методе делаю лишь след-ее: -Получил параметр html, сказал Page myPage = Serializator.Deserialize(html) и все!!! Больше не написав ни строчки кода!!! Фактически задача сводится к след-ему: как указать в схеме что элемен input входит в элемент form на каком угодно уровне вложенности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 11:08 |
|
||
|
В xsd указать вхождение элемента в элемент на любой глубине
|
|||
|---|---|---|---|
|
#18+
Petrovich ForeverЗадача (упрощенная от реальной): ... как указать в схеме что элемен input входит в элемент form на каком угодно уровне вложенности? Силен же народ выдумывать себе на голову (задницу?) извращения от лени... По-моему, т.к. схемы XSD исторически придумывались и создавались не для генерации "классов" пригодных для "[де]сериализации" (особенно под .NET Framework), а совсем для других целей - определения четкой (ключевое слово) и легко верифицируемой структуры XML-документа (без всякого намека на "гибкость"), то и ваша "благая мысль" - скорее всего не сможет быть "натянута" на существующие правила описания XSD-схем. (по крайней мере, я бы не взялся за такое дело даже для себя лично) Почему бы вам не посмотреть в сторону обычного DHTML DOM (IHTMLDocument3 from Mshtml.dll), где вы спокойно и без лишнего напряга можете получить методом getElementsByTagName коллекцию тегов хоть "form" внутри "body", хоть "input" внутри "form" (как раз "на каком угодно уровне вложенности") и делать с этой коллекцией все, что душе угодно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2006, 19:28 |
|
||
|
В xsd указать вхождение элемента в элемент на любой глубине
|
|||
|---|---|---|---|
|
#18+
Petrovich Forever... имея html можно обойтись обычными XPath (они очень даже просты) Уже в момент написания поста, задача реализована именно так. qu-quСилен же народ выдумывать себе на голову (задницу?) извращения от лени... Если следовать Вашей идее, то нам следует писать на класическом С. Классы, обьекты... - это же такое извращение. А уж коли Xsd.exe позволяет генерировать из схемы класс, который сможет инкапсулировать в себя всю логику сериализации и десериализации - то грех не попытаться воспользоваться этой возможностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2006, 13:29 |
|
||
|
В xsd указать вхождение элемента в элемент на любой глубине
|
|||
|---|---|---|---|
|
#18+
Petrovich Forever...Если следовать Вашей идее... - это же такое извращение. Чужую "идею" всегда легко и просто довести до абсурда (особенно в заочной полемике), гораздо тяжелее - аргументировано обосновать здравость и актуально-насущность своей "идеи"... Использование встроенных механизмов сериализации/десериализации какой-либо платформы - не самоцель в любом мало-мальски реальном проекте, а всего-лишь одно из "облегчающих жизнь" средств для достижения определенных результатов при прочих равных затратах ресурсов. И как любое из других "средств" за бесплатно оно не дается - платить все равно придется (хоть временем на выдумывание "хитро-вытраханой" схемы, хоть временем "тормознутости" встроенного в платформу XML-сериализатора, которому на вход будут подсовывать не то, что он ждет - "жесткую XML структуру", а кучу мусора в виде иерархии "body"-ей, "table"-ов и пр. "div"-ов, по которым он должен будет выискивать как манну небесную нужные ему "form" и "input"-ы, да еще не приведи БГ - входной HTML окажется невалидный с точки зрения XML-требований, т.е. кто-нить такой же озабоченный "оптимизацией" - не закроет тег "img" или "br"). Я не агитирую вас за "мировую революцию", просто из своего личного опыта знаю - за любой возможностью сделать что-то реальное "Больше не написав ни строчки кода!!!" стоит уйма того же самого кода, написанного "до вас", "за вас" и "вместо вас" (и далеко не факт, что это будет также - "лучше вас"). З.Ы. как говаривал классик: "Выбирай, но - осторожно... Но - выбирай!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2006, 17:42 |
|
||
|
|

start [/forum/topic.php?fid=14&fpage=75&tid=1334813]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 348ms |

| 0 / 0 |
