Пример текстового файла содержит:
`<?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 точно так, как он есть в файле. Еще раз спасибо за ваш отзыв.
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. Спасибо за помощь. Просто хотел, чтобы вы знали, что скрипт работает отлично. :)
После завершения процесса я хочу сохранить файл как текстовый файл, а не xml .... не могли бы вы посоветовать, что мне нужно сделать, чтобы получить этот результат? Спасибо
Вы должны показать нам больше xml. PowerShell очень хорошо умеет манипулировать xml, но то, как вы описываете то, что хотите, не оставляет другого выбора, кроме замены строк.