Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск строки по слову и добавление двух новых строк после найденой.

Ответить
Настройки темы
CMD/BAT - [решено] Поиск строки по слову и добавление двух новых строк после найденой.

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Angel79
Дата: 31-05-2024
Вложения
Тип файла: xml original.xml
(514 байт, 2 просмотров)
Тип файла: xml modified.xml
(629 байт, 0 просмотров)
Здравствуйте.

Задача:
Есть XML файл примерно такого вида:
HTML код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?> <Файл xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="739e2a13b4a"> <ИнфПолФХЖ1> <ТекстИнф Идентиф="ИдентификаторДокументаОснования" Значен="9999999-03bb-11ef-9ae6-00155d0a8205"/> <ТекстИнф Идентиф="ВидСчетаФактуры" Значен="Реализация"/> <ТекстИнф Идентиф="ТолькоУслуги" Значен="true"/> <ТекстИнф Идентиф="ДокументОбОтгрузке" Значен="111 от 01.01.2024 г."/> </ИнфПолФХЖ1> </Файл>

Необходимо написать батник, который добавит пару строк в XML файле.

В нем нужно найти строку содержащие текст "ТекстИнф Идентиф="ДокументОбОтгрузке" и добавить после этой строки ещё две строки
Например:
<ТекстИнф Идентиф="номер_тк" Значен="0146"/>
<ТекстИнф Идентиф="код_получателя" Значен="s"/>

Должно получиться вот так:

HTML код: Выделить весь код
<?xml version="1.0" encoding="windows-1251"?> <Файл xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="739e2a13b4a"> <ИнфПолФХЖ1> <ТекстИнф Идентиф="ИдентификаторДокументаОснования" Значен="9999999-03bb-11ef-9ae6-00155d0a8205"/> <ТекстИнф Идентиф="ВидСчетаФактуры" Значен="Реализация"/> <ТекстИнф Идентиф="ТолькоУслуги" Значен="true"/> <ТекстИнф Идентиф="ДокументОбОтгрузке" Значен="111 от 01.01.2024 г."/> <ТекстИнф Идентиф="номер_тк" Значен="0146"/> <ТекстИнф Идентиф="код_получателя" Значен="s"/> </ИнфПолФХЖ1> </Файл>

Обработанный файл нужно сохранить под тем же именем.

Возможно кто то уже сталкивался с похожей задачей.
Буду весьма благодарен за любую подсказку.

Заранее огромное спасибо!

Отправлено: 11:24, 31-05-2024

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6540
Благодарности: 1489

Профиль | Отправить PM | Цитировать


powershell
Код: Выделить весь код
$file = "C:\temp\in\file.xml"

$xmlfile = [xml](gc $file)

function Add-XmlElement ($id,$value) {
    $newElement = $xmlfile.CreateElement("ТекстИнф")
    $newElementAdd = $xmlfile.Файл.ИнфПолФХЖ1.AppendChild($newElement)
    $newElementAttribute = $newElementAdd.SetAttribute("Идентиф","$id")
    $newElementAttribute = $newElementAdd.SetAttribute("Значен","$value")
}

Add-XmlElement -id "номер_тк" -value "0146"
Add-XmlElement -id "код_получателя" -value "s"

$xmlfile.Save($file)
https://habr.com/ru/articles/524288/
https://www.tutorialspoint.com/how-t...ing-powershell

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:14, 31-05-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Круто всё работает.
А как сделать чтоб замена прошла по всем XML файлам c разными именами в определённой папке.

Отправлено: 12:32, 31-05-2024 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6540
Благодарности: 1489

Профиль | Отправить PM | Цитировать


Добавил, чтобы один и тот же ID не добавлялся несколько раз.
Код: Выделить весь код
function Add-XmlElement ($id,$value) {
    if (($xmlfile.Файл.ИнфПолФХЖ1.ChildNodes).идентиф -notcontains $id) {
        $newElement = $xmlfile.CreateElement("ТекстИнф")
        $newElementAdd = $xmlfile.Файл.ИнфПолФХЖ1.AppendChild($newElement)
        $newElementAttribute = $newElementAdd.SetAttribute("Идентиф","$id")
        $newElementAttribute = $newElementAdd.SetAttribute("Значен","$value")
    }
}

foreach ($file in dir C:\temp\in\*.xml) {

    $xmlfile = [xml](gc $file.fullname)

    Add-XmlElement -id "номер_тк" -value "0146"
    Add-XmlElement -id "код_получателя" -value "s"

    $xmlfile.Save($file.fullname)

}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 31-05-2024 в 13:26. Причина: + идемпотентность по id

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:12, 31-05-2024 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Большущее тебе спасибо!

Отправлено: 13:57, 31-05-2024 | #5


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать



Очень странная ситуация.
С тем файликом что я прикреплял всё в порядке , а вот с реальным есть проблема.
Вот реальный файлик

Отправлено: 14:52, 31-05-2024 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6540
Благодарности: 1489

Профиль | Отправить PM | Цитировать


Ну вполне естественно, структура разная.

Код: Выделить весь код
function Add-XmlElement ($id,$value) {
    if (($xmlfile.Файл.Документ.СвСчФакт.ИнфПолФХЖ1.ChildNodes).идентиф -notcontains $id) {
        $newElement = $xmlfile.CreateElement("ТекстИнф")
        $newElementAdd = $xmlfile.Файл.Документ.СвСчФакт.ИнфПолФХЖ1.AppendChild($newElement)
        $newElementAttribute = $newElementAdd.SetAttribute("Идентиф","$id")
        $newElementAttribute = $newElementAdd.SetAttribute("Значен","$value")
    }
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:52, 31-05-2024 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск строки по слову и добавление двух новых строк после найденой.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск строки по слову и добавление новой строки после найденой. Mikhael2011 Скриптовые языки администрирования Windows 17 16-03-2017 03:37
CMD/BAT - CMD/BAT Поиск по каталогам файлов bat и конвертирование их в JPEG freerider1989 Скриптовые языки администрирования Windows 1 18-04-2016 08:37
CMD/BAT - CMD/BAT разбор строки с символом перехода строки в конце. Alex1254 Скриптовые языки администрирования Windows 0 19-09-2013 19:24
CMD/BAT - [решено] Поиск и удаление строк, содержащих перевод строки после двоеточия SergeyVD Скриптовые языки администрирования Windows 3 14-03-2012 22:36
Java - Сортировка строк по первому слову в алфавитном порядке pogo Программирование и базы данных 5 23-12-2011 08:05




 
Переход