|
|
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
открыл интересный эффект в объектах, созданном MSXML. Полный текст документа следующий: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. когда задан тэг Код: xml 1. , значения всех вложенных тэгов: aDoc.selectSingleNode('Response\Result').nodeValue равно NULL. При этом aDoc.selectSingleNode('Response\Result').xml имеет значение ' Код: xml 1. ' при этом aDoc.selectSingleNode('Response\Result').firstchild.nodeValue тоже равен Null, a aDoc.selectSingleNode('Response\Result').firstchild.xml равен ' Код: xml 1. '. Только aDoc.selectSingleNode('Response\Result').firstchild.text = '1'. и уже aDoc.selectSingleNode('Response\Result').firstchild.firstchild.nodeValue равен '1'. Какие то странные и не объяснимые логике вложения. Кто нибудь может пояснить подобную аномалию? или знает на этот cчет что-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 11:46 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svdselectSingleNode на каком языке запросы? на xpath переключал, или какой-то майкрософтовский вижлбасик по умолчанию? svdResponse\Result не вижу такого тэга ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 11:56 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
Пишу в топике для Delphi, разработка тоже под Delphi. За опечатку извиняюсь: Копи/паств ошибка. Тест набираю латинскими буквами и перевожу программно в кирилицу - бывает что то пропускаешь. Правильный путь был aDoc.selectSingleNode('Response\Return'). Но все остальное нак как написал выше. Пришлось проверить еще раз. Так же попробовал обратный слеш на прямой поменять - результат не изменилыся. Написал процедуру итвлечения данных с учетом такого эффекта: Код: pascal 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. Но в любом случае это костыли, а не решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 15:53 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svdПишу в топике для Delphi, разработка тоже под Delphi. MSXML - Это не Delphi и у него свои языки для выборки нод (selectЛя-Ля-Ля) вот на каком языке этот select ты пишешь? И включил ли ты его? по умолчанию там НЕ XPath ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 17:29 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
Посмотри вот тут, может быть что-то интересное найдёшь https://github.com/the-Arioch/Delphi-XmlLite/tree/master/Samples/Excel XML-SS Read Speed Test TXmlDocument - это обёртка поверх MS XML в DOM-режиме. Соотв. там куски, разворачивающие эту обёртку, для тебя лишние, но остальное может что-то подсказать полезное Сравни работу с XPath в нём и в OmniXML , если конечно у тебя XPath, а не другой язык выборки из XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 17:36 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
MSXML - не Delph. MSXML - это динамическая библиотека он Майкрософта по парсингу XML-объектов. Естесственно не плохо бы узнать как включать какие либо языки, хотя в проекте это наврядли пригодится, хотя если такие артефакты появляются - значит я чего то не знаю о библиотеке. Так что жду охотно комментов. В дельфе есть свой парсер XML, но MSXML уже раз используется в других местах проекта и сооружать есше один велосипед было бы глупо. По нормальному XPath в текущем проекте не использую - к нему обратиолся только потому, что более наглядно описывает где проблема лежит. Указанный GITовский проект использует IXMLReader. Но вопрос не в этом. В одном месте уже используется MSXML и там везде идет прямое обращение к данным через свойство nodeValue. Таких заморочек не появлялось. Тут же v DOM-объекте какая то непонятка, которую обошел, но неизвестно почему она появилась (различия в использовании объектов библиотеки только из-за дополнительного тега, но источники объектов разные и что-либо менять не реально). Да и включить XmlLite в проект проблематично из-за лицензирования (работодател в этом плане бдителен). Так что спасибо за код, длы аизучения понадобится, но использовать на прямую нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 20:11 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
Ariochпо умолчанию там НЕ XPath https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms754679(v=vs.85) In MSXML 3.0 only, the default for this property is "XSLPattern"; however, you can set this property to "XPath" to switch the query language from XSLPattern to XPath. Once the property is set, there is no way to switch back without creating an instance of a new DOM object. For MSXML 4.0 and later, only a value of "XPath" is recognized as XPath is the only query language supported and therefore, this property can be ignored. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 21:05 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svd, значения всех вложенных тэгов: aDoc.selectSingleNode('Response\Result').nodeValue равно NULL. При этом aDoc.selectSingleNode('Response\Result').xml имеет значениеТак и должно быть тынц , тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2019, 21:11 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
Вообще судя по RFC, версия должна присутствовать. Так что парсер вовсе не обязан корректно работать с таким огрызком ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 10:34 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
спасобо большое. укакзанные ссылки многое объясняют. С первым использованием MSXML была еще работа по собиранию документа на основе данных. То есть банальное createElement и присвоение значения в nodeValue. Вероятно это тоже играет свою роль. Но там от "производителя" был тул для тестирования, который напроч не понимал тэг "xml", хотя для некоторых изысканий требовалось создать документы версии 1.1. Руководство настояло, что лучше использовать парсер от майкрософта, чем выслушивать подозрения от партнеров, что что-то не работает. Тем более с партнерами все тестили - проблем не возникало. С еще одним партнером возникла ситуация, когда ничего для проверки нет, а нужно создать REST-клиента. В качестве основы только спецификация из PDF с указанием примеров XML-документов и XDS. Поэтому пришлось еще и свой мини-сервер изобретать, где на вот этот айсберг напоролся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 13:33 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms754679(v=vs.85) For MSXML 4.0 and later, only a value of "XPath" is recognized as XPath is the only query language supported and therefore, this property can be ignored. Это приятно. Но тогда нужно проверять версию MS XML (завязывтаься на особенности реализации) - что, в общем, не проще, явного включения нужного языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 14:21 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svdвключить XmlLite в проект проблематично из-за лицензирования XMLLite - часть Windows XP Какое нафиг лицензирование.... svdУказанный GITовский проект использует IXMLReader. Это просто абстракция поверх трёх XML-библиотек с целью измерить и сравнить скорость. В процессе - нашлись и исправились несколько багов в OmniXML Этот проект был - просто демонстрация работающего кода с MS XML и в том ичсле с MS XML XPath и в том числе с XML namespaces от которых MS XML XPath сильно зависим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 14:25 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
AriochНо тогда нужно проверять версию MS XMLЯ сразу указываю CLSID_FreeThreadedDOMDocument60. Ибо нужно поддержка XSD, которой в 3.0 не было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 15:52 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svdс указанием примеров XML-документов и XDSПросто мечта! Валидируете XML схемой и сразу отлавливаете все ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 15:53 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
По поводу версии библиотки: сразу указываю CoDOMDocumet60.Create. Так что все должно подхватываться. По поводу XMLLite: каждый код разработчика подвергается ревизии с объяснением "почему именно так". Если где-то находится строчка copyright, то дополнительные процедуры проверки соотвествия лицензии и куча других малоприятных мероприятий, которые нужно пройти. Но за учебное пособие - большое спасибо. (ПС: вдокументе MSXML не нашел функции сохранения текста документа с табуляцией, м дельфийском документе - есть. Поэтому в отладочном режиме проводит конвертацию документов, что не есть хорошо). По поводу валидации: как правильно проводить сию процедуру? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 18:01 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svdвдокументе MSXML не нашел функции сохранения текста документа с табуляциейНет ее. А вам зачем? Открываете сохраненный xml в браузере и смотрите svdПо поводу валидации: как правильно проводить сию процедуру?В чем именно вопрос? Подключаете схему и валидируете. Вот код на JS. В Delphi переводится один в один Код: javascript 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2019, 18:48 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
svdПо поводу XMLLite: каждый код разработчика подвергается ревизии с объяснением "почему именно так". XMLLite хорош огроменной скоростью при крохотном расходе памяти (в отличие от DOM), и при этом несколько проще SAX'a ( как писать циклы для нас проще, чем бесконечно-рекурсивные функции, а писать if-ы проще, чем конечные автоматы с событиями ) Но он совсем не так нагляден, как DOM Что до copyright - я уже точно не помню. Половина - просто перевод на Паскаль Windows SDK - там вообще копирайта нету. Немножечко крохотных функций-хелперов поверх них - они вообще не стоят лицензии, но я мог какую-то и указать чтобы было, точно не помню - давно это было. В любом случае, они не обязательны, чисто для удобства. Были ли какие-то функции-хелперы в апстриме, который я форкнул... Вот вообще не помню, но они тоже не обязательны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 12:56 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
Кстати, линуксоиды в треде есть? под Линух кто-то писал XmlLite тоже, если потестируете скорость в сравнении с виндовым - было бы интересно, слегка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2019, 12:57 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
Arioch, под винду и линукс, delphi и fpc/лазарь хорошо работают жедаевские xml компоменты, TJclSimpleXML. Порт, если что, тут: https://github.com/Makhaon/jcl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2019, 00:03 |
|
||
|
странности при работе с MSXML
|
|||
|---|---|---|---|
|
#18+
makhaon, TJclSimpleXML течет, если есть ошибки в XML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2019, 09:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39789262&tid=2039668]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
241ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 570ms |

| 0 / 0 |
