Иcпользование значений из xml в путях при копировании
Уже неоднократно обращались с просьбой сделать копирование отчетности ТПСОД в каталоги с кодом формы ОКУД, или переименовывать отчетность с применением в имени кода формы.
По многочисленным просьбам…
В шаблонах XCOPY добавлена возможность использования XPath (https://www.w3schools.com/xml/xpath_syntax.asp).
Для этого в шаблонах XCOPY используются подстановки %X<xpath>%
Имеем ТК файла отчета:
<?xml version="1.0" encoding="windows-1251"?>
<ТК xmlns="urn:cbr-ru:tk:v1.3" ДатаВремяТК="2021-06-29T15:05:19" ИмяЗадачи="МПСО" ОтправительТК="КО.XXXX" ПолучательТК="ТУ.XX" УникИдТК="12345678-1234-1234-1234-1234567890ab">
<ДанныеТК ИдДанныхТК="1">
<ЭС ВидОрг="КО" ИмяФайлаЭС="Ф101_123456789.xml" КодОрг="XXXX" КодЭС="0409101" Содержит="ОЭС" УникИдЭС="12345678-1234-1234-1234-1234567890ab" ФорматЭС="XML" ШифрованиеЭС="Сигнатура">........
</ЭС><КА УстановленКА="Сигнатура">......</КА>
</ДанныеТК>
<КА УстановленКА="Сигнатура">.......</КА>
</ТК>
Нам нужен реквизит “КодЭС”. Соответствующий XPATH: //*/@КодЭС или //*[local-name()=’ТК’]/[local-name()=’ДанныеТК’]/[local-name()=’ЭС’]/@КодЭС. Обращаю внимание на то что запись //ТК/ДанныеТК/ЭС/@КодЭС не является корректной, поскольку <ТК> и его потомки относятся к заданному пространству имен (urn:cbr-ru:tk:v1.3), поэтому в xpath необходимо использовать локальные имена
Теперь как это применить в обработке:
[Section01]
Source=.\SOURCE
noResult=1
; Скопируем в .\RESULT с именем TK_<код формы>.xml
run0_command=xcopy .\RESULT\TK_%X//*/@КодЭС%.xml
; Скопируем в .\RESULT\<код формы>\<имя файла>
run1_command=xcopy .\RESULT\%X//*/@КодЭС%\%N%.%E%