Форум: "Прочее";
Текущий архив: 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.003 c