|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Изменение xml файла со сложной многоуровневой структурой |
|
PowerShell - [решено] Изменение xml файла со сложной многоуровневой структурой
|
Новый участник Сообщения: 7 |
Прошу совета по изменению сложного xml файла. В поисковиках находил только примеры для простого xml файла.
Дан такой xml файл документа системы обмена документов: <?xml version="1.0" encoding="windows-1251"?> <Файл xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="DP_REZRUISP_2TScd6c7b34-cdb1-4074-a47a-9624d53cb1bd_2TS816590f4-9d8d-4859-960b-c0a45ad53cc4_20171204_0b8a23ec-df6b-437c-b38d-9485e2538ab4" ВерсПрог="1.0" ВерсФорм="5.01"> <СвУчДокОбор ИдОтпр="2TS816590f4-9d8d-4859-960b-c0a45ad53cc4" ИдПол="2TScd6c7b34-cdb1-4074-a47a-9624d53cb1bd"> <СвОЭДОтпр НаимОрг="synerdocs" ИННЮЛ="7728075928" ИдЭДО="2TS" /> </СвУчДокОбор> <Документ КНД="1175012" ДатаИнфИсп="04.12.2017" ВремИнфИсп="08.15.12" НаимЭконСубСост="ООО Тестовая организация Synerdocs 1501831146"> <СвДокПРУ> <НаимДок ПоФактХЖ="Документ о передаче результатов работ (Документ об оказании услуг)" НаимДокОпр="Акт о передаче результатов работ (Акт об оказании услуг)" /> <ИдентДок НомДокПРУ="жЭKuг" ДатаДокПРУ="04.12.2017" /> <ДенИзм КодОКВ="643" НаимОКВ="Российский рубль" КурсВал="313" /> <СодФХЖ1> <ЗагСодОпер>9нoЧ3oЗъюЯ}cnпъ</ЗагСодОпер> <Исполнитель> <ИдСв> <СвОрг> <СвЮЛ НаимОрг="ООО Тестовая организация Synerdocs 1501831146" ИННЮЛ="1882647854" КПП="249310132" /> </СвОрг> </ИдСв> <Адрес> <АдрРФ Индекс="342456" КодРегион="18" Город="Ижевск" НаселПункт="Пенсионная 2" /> </Адрес> </Исполнитель> <Заказчик> <ИдСв> <СвОрг> <СвЮЛ НаимОрг="ООО Тестовая организация Synerdocs 1485530969" ИННЮЛ="1835056809" КПП="183301001" /> </СвОрг> </ИдСв> <Адрес> <АдрРФ Индекс="426039" КодРегион="18" Город="Ижевск" /> </Адрес> </Заказчик> <Основание НаимОсн="Наименование основания 2" НомОсн="454-11" ДатаОсн="04.12.2017" ДопСвОсн="поле для доп. сведений" /> <Основание НаимОсн="Наименование основания 2" НомОсн="4нк84" ДатаОсн="04.12.2017" ДопСвОсн="доп сведения оснвоание 2" /> <ИдГосКон>094440</ИдГосКон> <ВидОперации>яR>Е\lU@"\EэyЫs</ВидОперации> <ОписРабот НачРабот="06.12.2017" КонРабот="28.12.2017" СтБезНДСИт="2061354" СумНДСИт="371043.72" СтУчНДСИт="2432397.72"> <Работа Номер="1" НаимРабот="Покупка каши" НаимЕдИзм="кг" ОКЕИ="166" Цена="4535" Количество="454" СтоимБезНДС="2058890" НалСт="18%" СумНДС="370600.2" СтоимУчНДС="2429490.2" КоррСчДебет="567893456" КоррСчКредит="567893456"> <Описание>яневая кашка</Описание> <ИнфПолеОписРабот Идентиф="инфа о 1 полях 1" Значен="инфа о 1 значениях 1" /> <ИнфПолеОписРабот Идентиф="инфа о 1 полях 2" Значен="инфа о 1 значениях 2" /> </Работа> <Работа Номер="2" НаимРабот="Покупка молочка" НаимЕдИзм="л." ОКЕИ="625" Цена="56" Количество="44" СтоимБезНДС="2464" НалСт="18%" СумНДС="443.52" СтоимУчНДС="2907.52" КоррСчДебет="678123546" КоррСчКредит="678123546"> <Описание>козье</Описание> <ИнфПолеОписРабот Идентиф="инфа о 2 полях 1" Значен="инфа о 2 значениях 1" /> <ИнфПолеОписРабот Идентиф="инфа о 2 полях 2" Значен="инфа о 2 значениях 2" /> </Работа> </ОписРабот> <ОписРабот НачРабот="08.12.2017" КонРабот="20.12.2017" СтБезНДСИт="1300" СумНДСИт="234" СтУчНДСИт="1534"> <Работа Номер="1" НаимРабот="Соль" НаимЕдИзм="кг" ОКЕИ="166" Цена="12" Количество="12" СтоимБезНДС="144" НалСт="18%" СумНДС="25.92" СтоимУчНДС="169.92" КоррСчДебет="345890123" КоррСчКредит="456789123"> <Описание>йодированная</Описание> <ИнфПолеОписРабот Идентиф="инфа о 3 полях 1" Значен="инфа о 3 значениях 1" /> <ИнфПолеОписРабот Идентиф="инфа о 3 полях 2" Значен="инфа о 3 значениях 2" /> </Работа> <Работа Номер="2" НаимРабот="Перец" НаимЕдИзм="г" ОКЕИ="163" Цена="34" Количество="34" СтоимБезНДС="1156" НалСт="18%" СумНДС="208.08" СтоимУчНДС="1364.08" КоррСчДебет="456098123" КоррСчКредит="908123675"> <Описание>кайенский</Описание> <ИнфПолеОписРабот Идентиф="инфа о 4 полях 1" Значен="инфа о 4 значениях 1" /> <ИнфПолеОписРабот Идентиф="инфа о 4 полях 2" Значен="инфа о 4 значениях 2" /> </Работа> </ОписРабот> <ИнфПолФХЖ1> <ТекстИнф Идентиф="первое поля для доп. инффы" Значен="значение 1" /> <ТекстИнф Идентиф="второе поля для доп. инффы" Значен="значение 2" /> </ИнфПолФХЖ1> </СодФХЖ1> </СвДокПРУ> <СодФХЖ2 СодОпер="Результаты работ переданы (услуги оказаны)" ДатаПер="28.12.2017"> <СвПерВещи ДатаПерВещ="28.12.2017" СвПерВещ="первое сведение о передаче вещи" /> <ИнфПолФХЖ2 Идентиф="первое нижнее поле для доп. инфы" Значен="1 значение нижнее" /> <ИнфПолФХЖ2 Идентиф="второе нижнее поле для доп. инфы" Значен="2 значение нижнее" /> </СодФХЖ2> <Подписант ОблПолн="1" Статус="1" ОснПолнПодп="Должностные обязанности"> <ЮЛ ИННЮЛ="1882647854" НаимОрг="ООО Тестовая организация Synerdocs 1501831146" Должн="test"> <ФИО Фамилия="N" Имя="Al" /> </ЮЛ> </Подписант> </Документ> </Файл> #Массив символов для генерации данных тектсовых полей# $listtext = [Char[]]'abcd efghijklm nopqrstuvwxy zABCDEFGHIJKLMNOPQRSTUVWX YZабвгдеёжзийк лмнопрстуфхцчшщъыь эюяАБВГДЕЁЖЗИ ЙКЛМНОПРСТУФХЦЧШ ЩЪЫЬЭЮЯ1234567890*?/\|<>,.()[]{};:"!@#$%^&' $listnum = [Char[]]'1234567890' #Блок задания значений для параметров, определяющих пути к файлам документов# $DPRR = "C:\Users\Администратор\Downloads\ДПРР(исхакт).xml" #Блок задания значений для параметров подстановки в xml# $NumDoC= -join (1..5 | Foreach-Object { Get-Random $listtext -count 1 }) $Date = Get-Date -Format "dd.MM.yyyy" $Currency = -join (1..3 | Foreach-Object { Get-Random $listnum -count 1 }) $Zagoper= -join (1..15 | Foreach-Object { Get-Random $listtext -count 1 }) $IDgos = -join (1..6 | Foreach-Object { Get-Random $listnum -count 1 }) $ВидОперации= -join (1..15 | Foreach-Object { Get-Random $listtext -count 1 }) $НомОсн= -join (1..6 | Foreach-Object { Get-Random $listtext -count 1 }) $ДопСвОсн = -join (1..15 | Foreach-Object { Get-Random $listtext -count 1 }) $Price =-join (1..3 | Foreach-Object { Get-Random $$listnum -count 1 }) #Изменение документа Исх. ДПРР# $xml = New-Object -TypeName System.Xml.XmlDocument $xml.load($DPRR) $xml.Файл.Документ.СвДокПРУ.ИдентДок.НомДокПРУ = $NumDoC $xml.Файл.Документ.СвДокПРУ.ИдентДок.ДатаДокПРУ = "$Date" $xml.Файл.Документ.СвДокПРУ.ДенИзм.КурсВал = $Currency $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.ЗагСодОпер = $Zagoper <# почему-то не может зайти в этот блок $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.Основание.НаимОсн = $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.Основание.НомОсн= $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.Основание.ДатаОсн= $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.Основание.ДопСвОсн= #> $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.ИдГосКон = $IDgos $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.ВидОперации = $ВидОперации $xml.save($DPRR) например для вот это узла <Основание НаимОсн="Наименование основания 2" НомОсн="454-11" ДатаОсн="04.12.2017" ДопСвОсн="поле для доп. сведений" /> Подсказка выводилась до ветки $xml.Файл.Документ.СвДокПРУ.СодФХЖ1.Основание и для дальнейших узлов НаимОсн, НомОсн и т.д. подсказок не выводилось. Если указать эти узлы вручную, то выводиться сообщение, что не удается найти свойство. Подозреваю, что дела в глубине расположения узлов в дереве и это можно как то обойти, но к сожалению примеров толковых найти не могу. |
|
Отправлено: 10:22, 04-12-2017 |
Забанен Сообщения: 793
|
Цитата Bolshoi:
PS E:\> Select-Xml -Path E:\src\test.xml -XPath "//*[НаимОсн]" Node Path Pattern ---- ---- ------- Основание E:\src\test.xml //*[@НаимОсн] Основание E:\src\test.xml //*[@НаимОсн] PS E:\> $x = Select-Xml -Path E:\src\test.xml -XPath "//*[НаиОсн]" PS E:\> $x | % {$_.Node} НаимОсн НомОсн ДатаОсн ДопСвОсн ------- ------ ------- -------- Наименование основания 2 454-11 04.12.2017 поле для доп. сведений Наименование основания 2 4нк84 04.12.2017 доп сведения оснвоание 2 PS E:\> $x | % {$_.Node.ДопСвОсн} поле для доп. сведений доп сведения оснвоание 2 |
|
Отправлено: 09:47, 05-12-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
|
|
Последний раз редактировалось Bolshoi, 08-12-2017 в 15:41. Отправлено: 15:20, 08-12-2017 | #3 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:58, 17-01-2018 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - редактирование .xml файла | Bootman | Скриптовые языки администрирования Windows | 3 | 10-10-2017 21:28 | |
CMD/BAT - Копирование со структурой | westovich | Скриптовые языки администрирования Windows | 6 | 09-06-2016 08:34 | |
Любой язык - [решено] изменение xml-файла скриптом | unkilledfore | Скриптовые языки администрирования Windows | 13 | 08-06-2013 10:05 | |
2008 R2 - Требуется помощь новичку со структурой домена и dns | Patjomkin | Windows Server 2008/2008 R2 | 0 | 21-11-2011 16:02 | |
[решено] проверка XML-файла на соответствие XML schema в IE 6 и Firefox 2 | dimait | Вебмастеру | 4 | 23-08-2007 02:02 |
|