Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: [wlx] XML Review - просмотр XML и JSON файлов 
Author Message
Destiny



PostPosted: Mon Dec 05, 2022 13:32    Post subject: Reply with quote

olegvsk wrote:
Зависит от того, где используется XPath. MS SQL, например, не примет /Root/OnlyNode, а попросит (/Root/OnlyNode)[1] либо /Root[1]/OnlyNode[1]. Поэтому сделал XPath избыточным.

Да, нашел инфу о том, что у мелкомягких свой подход с типизации данных в XQuery/XPath.
И да оба ваши варианта типа решают проблему. НО все же заметим, что первый вариант оказывается наиболее приближен к логическому выделению пути: /LIST_OF_PERSONS/DATA[2]/PASSPORT/SERIJA
вот пример:
Code:

with TEST(info) as
(
   select info
   from   (values (cast('<LIST_OF_PERSONS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                           <DATA>
                             <NAME>nm1</NAME>
                             <ID>12</ID>
                             <PASSPORT>
                               <SERIJA>mn123</SERIJA>
                               <NOMER>3335</NOMER>
                             </PASSPORT>
                           </DATA>
                           <DATA>
                             <NAME>nm2</NAME>
                             <ID>23</ID>
                             <PASSPORT>
                               <SERIJA>mn354</SERIJA>
                               <NOMER>5645</NOMER>
                             </PASSPORT>
                           </DATA>
                           <DATA>
                             <NAME>nm3</NAME>
                             <ID>34</ID>
                             <PASSPORT>
                               <SERIJA>mn456</SERIJA>
                               <NOMER>64897</NOMER>
                             </PASSPORT>
                           </DATA>
                         </LIST_OF_PERSONS>' as xml))) TEST(info)
)
SELECT info.value('(/LIST_OF_PERSONS/DATA[2]/PASSPORT/SERIJA)[1]', 'nvarchar(20)') as Seria
FROM   TEST;

Если MS SQL под рукой нет - то вот тут онлайн можно запустить:
https://data.stackexchange.com/stackoverflow/query/1683212?opt.withExecutionPlan=true

Т.е. для MS SQL да, надо делать допущение, но оно возможно быть минимальным! Т.е. основа это:
/LIST_OF_PERSONS/DATA[2]/PASSPORT/SERIJA, а доработкой является лишь взятие основы в (...)[1]
И прошу заметить - этого действия вы все равно не делаете! А значит напрямую использовать этот путь
в MS SQL все равно нельзя Sad
Отсюда вывод-предложение. Команду копирования XPath стоит сделать в виде выпадающего меню и в нем
предлагать под какие задачи пользователю будет удобнее копировать этот путь.
Для простых, нетребовательных случаев это:
/LIST_OF_PERSONS/DATA/PASSPORT/SERIJA
хотя не могу найти пример такого использования, ведь это выборка всего и вся...
для более корректного уточнения, ибо мы же на конкретном элементе вызываем команду:
/LIST_OF_PERSONS/DATA[2]/PASSPORT/SERIJA
спецом для использования в MS SQL напрямую:
(/LIST_OF_PERSONS/DATA[2]/PASSPORT/SERIJA)[1]

Кстати, проверять все пути вот тут: https://www.videlibri.de/cgi-bin/xidelcgi
можно - там все вариации спецификаций поддерживаются вроде как.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group