Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.01.30;
Скачать: [xml.tar.bz2];

Вниз

Версионность MS XML движка   Найти похожие ветки 

 
Пит   (2010-10-12 14:34) [0]

Насколько я понял, начиная с четвертой версии движка MS XML выдерживается параллельность версий. То есть, если я создам:

CreateOleObject("Msxml2.DOMDocument.4.0") as IXMLDomDocument2

То при отсутствии четвертой версии движка будет ошибка. Хотя при этом может быть установлена пятая и шестая версия. И насколько я понял, пятая и шестая версия полностью поддерживает те интерфейсные объекты, которые могут быть в четвертой версии.

Из-за работы со схемами минимально мне нужная версия 4.0
Но чтобы не заставлять пользователей ставить именно эту версию при наличии более новой, верно ли, что я могу начать последовательно создавать все более новые версии объектов. То есть:

try
 My := CreateOleObject("Msxml2.DOMDocument.4.0") as IXMLDomDocument2
except on E:blabla
 try
   My := CreateOleObject("Msxml2.DOMDocument.5.0") as IXMLDomDocument2
 except on E:blabla
   My := CreateOleObject("Msxml2.DOMDocument.6.0") as IXMLDomDocument2
 end;
end;


Как-то так?

Должны быть, наверное, более красивые решения вопроса.


 
Медвежонок Пятачок ©   (2010-10-12 14:37) [1]

То при отсутствии четвертой версии движка будет ошибка.

Ну и что?
Ты видел скрипты создания mshmlhttprequest?
Там вилок намого больше.
сначала идет попытка создать встроенный в браузер объект.
если браузер его не поддерживает, идут попытки создания activx объектов разных версий.

последовательно сверху вниз.


 
Пит   (2010-10-12 14:42) [2]

вопрос, собственно, содержится вот здесь:


> Но чтобы не заставлять пользователей ставить именно эту
> версию при наличии более новой, верно ли, что я могу начать
> последовательно создавать все более новые версии объектов.
>  То есть:
> ...

> Как-то так?
>
> Должны быть, наверное, более красивые решения вопроса


 
Медвежонок Пятачок ©   (2010-10-12 14:45) [3]

ну как как.
шестая версия тебя устраивает?
если да, начинай создание с нее.
если есть - работаешь, если нет - создаешь четвертую.
получилось - работаешь с четвертой - не получилось - спускаешься последовательно до минимально возможной версии.


 
DVM ©   (2010-10-12 14:58) [4]

Вот из-за таких вещей я и не люблю MS XML. Конечно, он лучше разного рода самоделок, но эти версии...


 
Sergey Masloff   (2010-10-12 15:15) [5]

А не проще создать по независимому имени, потом взять версию и если она ниже нужной - сказать "не могу" а если выше - спокойно работать? Зачем точная версия?


 
Пит   (2010-10-12 15:33) [6]


> А не проще создать по независимому имени, потом взять версию
> и если она ниже нужной - сказать "не могу" а если выше -
>  спокойно работать?

можно набросать пример?

Еще я вот что читал:

Отказ от не зависящих от версии ProgID

По похожим причинам была устранена поддержка не зависящих от версии ProgID. По сравнению с предыдущими версиями, в которых некоторые ProgID обновлялись при установке новой версии MSXML, отказ от них в MSXML 4.0 обеспечивает реальную установку, гарантирующую паралллельное функционирование версий. Теперь CreateObject("MSXML2.DOMDocument") не создает экземпляр объекта MSXML 4.0 DOM, а создает экземпляр объекта предыдущей версии. Если вы хотите использовать MSXML 4.0, вы должны создать объект так: CreateObject("MSXML2.DOMDocument.4.0").


 
Пит   (2010-10-12 15:37) [7]


> шестая версия тебя устраивает?
> если да, начинай создание с нее.

непонятная логика. Меня по идее устраивает все, что начинается с четвертой версии. Я исхожу из того, что все фичи, поддерживаемые четвертой версией - поддерживаются и следующими.

Непонятно, почему ты предлагаешь создавать с шестой версии. А если через 5 лет у человека будет Windows 8 с предустановленной MS XML 7?

На мой взгляд логичнее тут создавать, начиная с минимально необходимой мне версии движка (который поддерживает интерфейс нужного мне объекта) и дальше по нарастающей. Но до какого предела? Забить в цикле :

My := CreateOleObject("Msxml2.DOMDocument.4.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.5.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.6.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.7.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.15.0") as IXMLDomDocument2;
...
My := CreateOleObject("Msxml2.DOMDocument.XXX.0") as IXMLDomDocument2;

До какой величины наращивать XXX? :-)

Чую должен быть более красивый подход.


 
DVM ©   (2010-10-12 15:45) [8]


> До какой величины наращивать XXX? :-)

до необходимой тебе очевидно.


 
Медвежонок Пятачок ©   (2010-10-12 15:57) [9]

до какого предела?

До MAXINT ясен перец


 
Пит   (2010-10-12 16:28) [10]


> до необходимой тебе очевидно.

То ли я не понял ответа, то ли ты не вник вопроса. Я начинаю с необходимой мне версии.


> До MAXINT ясен перец

по-моему, я вполне нормально сформулировал вопрос.


 
Медвежонок Пятачок ©   (2010-10-12 16:40) [11]

и чем же не устраивает ответ?


 
Медвежонок Пятачок ©   (2010-10-12 16:43) [12]

допустим, что через 50 лет старшая версия msxml будет равна 100.
тогда цикл
for i := 1 to maxint
сделает брейк на девяностодевятой итерации (и то при условии, что у клиента только сотая версия и есть в наличии. А реально и того раньше)

что не так?


 
Kerk ©   (2010-10-12 16:48) [13]


> Медвежонок Пятачок ©   (12.10.10 16:43) [12]
>
> допустим, что через 50 лет старшая версия msxml будет равна
> 100.
> тогда цикл
> for i := 1 to maxint
> сделает брейк на девяностодевятой итерации (и то при условии,
>  что у клиента только сотая версия и есть в наличии. А реально
> и того раньше)

А если у него нет вообще никакой? :)


 
Медвежонок Пятачок ©   (2010-10-12 16:51) [14]

ну тогда программа полный цикл прогонит. всего-то.


 
DVM ©   (2010-10-12 18:42) [15]


> Пит   (12.10.10 16:28) [10]
>
> > до необходимой тебе очевидно.
>
> То ли я не понял ответа, то ли ты не вник вопроса. Я начинаю
> с необходимой мне версии.
>

ну и правильно делаешь, если тебе достаточно 4 версии, зачем искать 5, и т.д. Тебе шашечки или ехать? Ехай на 4-ой.


 
Пит   (2010-10-12 18:54) [16]


> если тебе достаточно 4 версии, зачем искать 5, и т.д.


ответ:


> чтобы не заставлять пользователей ставить именно эту версию
> при наличии более новой


 
DVM ©   (2010-10-12 19:07) [17]


> Пит   (12.10.10 18:54) [16]
>

Предлагаю определить установленную в системе последнюю версию парсера и использовать ее, если она подходит


 
DVM ©   (2010-10-12 19:10) [18]


> Пит  

в HKEY_CLASSES_ROOT перечислены все установленные версии MSXML


 
Пит   (2010-10-12 19:38) [19]


> в HKEY_CLASSES_ROOT перечислены все установленные версии
> MSXML

чем это отличается от последовательного создания интерфейсных объектов?


> Предлагаю определить установленную в системе последнюю версию
> парсера

как это можно сделать?

Есть где-то запись аля: "LastVerXMLParser" ?


 
DVM ©   (2010-10-12 21:17) [20]


> Пит   (12.10.10 19:38) [19]


> чем это отличается от последовательного создания интерфейсных
> объектов?

там точно ты будешь знать когда остановиться.


> Есть где-то запись аля: "LastVerXMLParser" ?

думаю есть, так как есть утилита от MS которая мгновенно выдает версию XML  парсера.


 
Kerk ©   (2010-10-12 23:13) [21]

Никак не пойму, что мешает без указания версии создавать?

My := CreateOleObject("Msxml2.DOMDocument") as IXMLDomDocument2


 
Плохиш ©   (2010-10-12 23:18) [22]


> Kerk ©   (12.10.10 23:13) [21]

Он просил серсию 4, а ты ему 3 предлагаешь :-)


 
Kerk ©   (2010-10-12 23:30) [23]


> Плохиш ©   (12.10.10 23:18) [22]

Да, это ты прав.
Вообще, есть статейка, с которой сложно не согласиться
http://msdn.microsoft.com/en-us/library/ms761415%28v=VS.85%29.aspx
Странного желает топикстартер


 
Пит   (2010-10-13 11:58) [24]


> там точно ты будешь знать когда остановиться.

каким образом? Если там есть записи аля:

Msxml2.DOMDocument.5.0
Msxml2.DOMDocument.6.0
Msxml2.DOMDocument.XXX.0

Откуда я знаю когда остановиться? Точно также надо перебирать в цикле.

Конечно, скорее всего есть вариант взять все записи начинающиеся с Msxml2.DOMDocument, распарсить их и вычислить наибольшее значение... Блин, ну ведь точно должен быть более оптимальный вариант то?!


> думаю есть

я вот тоже думаю, что есть. Этому и посвящен топик, я ответа не знаю )


> Никак не пойму, что мешает без указания версии создавать?

такой вопрос в этой теме уже задавался в посте номер [5] и я на него отвечал в посте номер [6]


 
Пит   (2010-10-13 12:03) [25]


> Вообще, есть статейка, с которой сложно не согласиться
> http://msdn.microsoft.com/en-us/library/ms761415%28v=VS.
> 85%29.aspx
> Странного желает топикстартер

прочитай, пожалуйста, всю ветку, чтобы все таки вникнуть в проблему.

Я полностью согласен с MS, что если минимально необходимая мне версия это 4.0, то не стоит использовать версию 3.0

Но если у клиента уже установлена версия 5.0, то почему бы не использовать ее? Весь смысл ветки в этом.


 
Медвежонок Пятачок ©   (2010-10-13 12:09) [26]

прямо гений в муках.
гений хочет сегодня написать код, который не надо будет править сто лет.
но гений боится константы maxint.


 
Плохиш ©   (2010-10-13 12:15) [27]

Судя по тому, что сам мелкий софт в предлагаемой программе определения установленных версий содержит список названий, тему дальше мусолить смысла не вижу.


 
Пит   (2010-10-13 14:41) [28]


> Судя по тому, что сам мелкий софт в предлагаемой программе
> определения установленных версий содержит список названий,
>  тему дальше мусолить смысла не вижу.

даже так ) Забавно ))

Я уже сделал перебор от 4-ой до 8-ой версии ) Ну так и оставлю, я все таки думал, что есть какой-то красивый способ определить максимальную версию XML движка.


 
DVM ©   (2010-10-13 14:46) [29]


> Пит   (13.10.10 11:58) [24]


> каким образом? Если там есть записи аля:
>
> Msxml2.DOMDocument.5.0
> Msxml2.DOMDocument.6.0
> Msxml2.DOMDocument.XXX.0
>
> Откуда я знаю когда остановиться? Точно также надо перебирать
> в цикле.

ключей, начинающихся с MSXML, да и вообще ключей там значительно меньше чем MAXINT


 
Медвежонок Пятачок ©   (2010-10-13 14:54) [30]

да и вообще ключей там значительно меньше чем MAXINT

Ты просто не понял замысла гения.
их (ключей) сейчас меньше. А через тысячу лет их будет возможно  близко к максинт. В смысле номер версии будет с каждым тысячелетием приближаться к максинту.

Вот пит и озабочен как бы сегодня написать нетленный код, который будет работоспособен через тысячу или миллиард лет.

Ну типа чтобы не переписывать потом.


 
Пит   (2010-10-13 15:36) [31]

Верно. Вообще, программы так и пишутся обычно, чтобы работало исключительно сегодня и на том, что есть у клиента. Что может произойти хоть завтра - абсолютно не учитывается.

Те, кто пытается сделать так, чтобы работало в по возможности в большем количестве случаев зовутся гениями. Это правда )


 
Медвежонок Пятачок ©   (2010-10-13 15:58) [32]

тогда тебе больше подойдет макскардинал, а не максинт.
еще надольше хватит


 
Kerk ©   (2010-10-13 16:25) [33]

максинт, максардинал, а что если появится версия Msxml2.DOMDocument.9.1 ?
это тоже учитывать?


 
Пит   (2010-10-13 17:13) [34]

ну думаю Медвеженок предложит делать два цикла вложенных, где два раза бегать до макскарлинал. Пятачки они такие )))


 
Медвежонок Пятачок ©   (2010-10-13 17:34) [35]

нет, что ты.
я предложу генерить имена из всех комбинаций всех символов алфавита.
чем там чорт не шутит - кто ж сегодня знает как будет микрософт именовать свои классы через миллиард лет.
а нам тут позарез уже сегодня надо выйти из цикла.


 
Kerk ©   (2010-10-13 18:05) [36]

Я бы на самом деле забил в строковый массив известные мне версии MSXML и ходил циклом по нему. Угадывать имена будущих версий смысла нет ибо:
1) Нет гарантии, что формат названия не изменится (был же когда-то Microsoft.XMLDOM)
2) Нет гарантии, что сегодня написанный код сможет работать с этой неизвестной версией из будущего



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2011.01.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.004 c
2-1289371618
Irisss
2010-11-10 09:46
2011.01.30
TObjectList не преобразовывает item ы в Duble


15-1287397858
Омлет
2010-10-18 14:30
2011.01.30
Demosaicing, бысто и медленно


2-1289307984
Faiwer
2010-11-09 16:06
2011.01.30
Destroy


11-1228467941
Дмитрий
2008-12-05 12:05
2011.01.30
Как изменить высоту items in listview?


2-1288712243
Doctordradd
2010-11-02 18:37
2011.01.30
Правильный импорт данных из Экселя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский