Найдите и получите контент из данных в XML, а затем поместите это значение в другой тег с помощью powershell.

Пример текстового файла содержит:

`<?xml version = "1.0" encoding = "UTF-8" ?> 
<Document xmlns  = "urn:iso:std:iso:20022:tech:xsd:camt.056.001.01" 
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance">
<FIToFIPmtCxlReq>
<Assgnmt>
<Id>ID123456</Id>
<Assgnr>
<Agt>
<FinInstnId>
<BIC>BICSEND</BIC>
</FinInstnId>
</Agt>
</Assgnr>
<Assgne>
<Agt>
<FinInstnId>
<BIC>BICRCV</BIC>
</FinInstnId>
</Agt>
</Assgne>
<CreDtTm>2020-12-16T09:05:15.0Z</CreDtTm>
</Assgnmt>
<CtrlData>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>0</CtrlSum>
</CtrlData>
<Undrlyg>
<TxInf>
<CxlId>20201216.105.19344855940590400</CxlId>
<OrgnlGrpInf>
<OrgnlMsgId>REF123456789</OrgnlMsgId>
<OrgnlMsgNmId>pacs.008</OrgnlMsgNmId>
</OrgnlGrpInf>
<OrgnlInstrId>FT123456</OrgnlInstrId>
<OrgnlEndToEndId>NOTPROVIDED</OrgnlEndToEndId>
<OrgnlTxId>20201216.100.02202020</OrgnlTxId>
<OrgnlIntrBkSttlmAmt Ccy = "EUR">25.23</OrgnlIntrBkSttlmAmt>
<OrgnlIntrBkSttlmDt>2020-12-16</OrgnlIntrBkSttlmDt>`

Обратите внимание, что я хотел бы закодировать PowerShell для извлечения данных в теге <OrgnlIntrBkSttlmAmt> (обратите внимание, что длина данных может измениться, поскольку это поле суммы), а затем заменить «0» в теге <CtrlSum> на «25,23».

Может кто-то помочь мне с этим.

Спасибо за ваше время.

Вы должны показать нам больше xml. PowerShell очень хорошо умеет манипулировать xml, но то, как вы описываете то, что хотите, не оставляет другого выбора, кроме замены строк.

Theo 21.12.2020 11:01

@ Тео, спасибо за ваш комментарий. Я предоставил xml точно так, как он есть в файле. Еще раз спасибо за ваш отзыв.

Alan Bartoli 21.12.2020 13:29
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

XML-файл, который вы нам показываете, недействителен, поскольку в нем отсутствуют следующие закрывающие теги:

        </TxInf>
    </Undrlyg>
</FIToFIPmtCxlReq>
</Document>

Если я добавлю их, вы можете сделать это, чтобы обновить значение в теге <CtrlSum>:

# load the xml from file
[xml]$xml = Get-Content -Path 'D:\Test\test.xml' -Raw
# get the amount from the 'OrgnlIntrBkSttlmAmt' tag
$amount = $xml.Document.FIToFIPmtCxlReq.Undrlyg.TxInf.OrgnlIntrBkSttlmAmt.'#text'

# use that amount to put in the 'CtrlSum' tag
$xml.Document.FIToFIPmtCxlReq.CtrlData.CtrlSum = $amount

# save the updated xml to file
$xml.Save('D:\Test\test.xml')

Прежде всего, приносим извинения за то, что не предоставили полные теги XML. Спасибо за помощь. Просто хотел, чтобы вы знали, что скрипт работает отлично. :)

Alan Bartoli 21.12.2020 16:59

После завершения процесса я хочу сохранить файл как текстовый файл, а не xml .... не могли бы вы посоветовать, что мне нужно сделать, чтобы получить этот результат? Спасибо

Alan Bartoli 13.01.2021 08:24

Другие вопросы по теме