Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Замена текста между тегов (http://forum.oszone.net/showthread.php?t=240241)

vano42 09-08-2012 07:47 1967159

Замена текста между тегов
 
Здравствуйте,
имеется xml файл с примерной структурой
Код:

<?xml version="1.0" encoding="UTF-8"?>
<user>
    <string name="u_name">Vasilii Terkin</string>
    <string name="u_vozrast">24565</string>
    <string name="u_foto">local.jpg</string>
</user>

в файле всё может измениться, но
Код:

<string name="u_name">%USERNAME%</string>
останется неизменным.

Подскажите как заменить текст между тегами выше


еслиб были регулярки то чтото вроде
Код:

#<string name="u_name">(.*)</string>#iU

Iska 09-08-2012 08:34 1967171

vano42, если:
Цитата:

Цитата vano42
в файле всё может измениться, »

используйте XML DOM: DOM Reference, а не регулярные выражения.

vano42 09-08-2012 08:55 1967174

Цитата:

Цитата Iska
используйте XML DOM: DOM Reference, а не регулярные выражения. »

как требуемую задачу на нём сделать в .bat мне ещё более не понятно(

Anonymоus 09-08-2012 10:48 1967242

vano42, я правильно понимаю, вам нужно найти определённый тэг (<string name="u_name">) и заменить только его содержимое, оставив содержимое других тэгов неизменным, так? В принципе, grep-ом это решаемо.

vano42 09-08-2012 12:23 1967299

Anonymоus, именно так.

Anonymоus 09-08-2012 13:19 1967347

vano42, внешнюю утилиту grep можно взять здесь.

Код:

@Echo Off
SetLocal EnableDelayedExpansion

Set File=file.txt
Set Out=file2.txt
Set NewValue=TestName123

:: Определяем номер строки с искомым тэгом
For /F "delims=:" %%A In ('grep -En "<string name=.u_name.>[^<]*</string>" "%File%"') Do (
        Set Offset=%%A
)

:: Разбираем файл построчно
For /F "usebackq delims=" %%A In ("%File%") Do (
        Set /A i+=1
        rem Пишем всё, что не является искомой строкой в другой файл
        If Not !i!==%Offset% (
                Echo %%A
        ) Else (
                For /F "tokens=1,2,3,4 delims=<>" %%A In ('grep -E "<string name=.u_name.>[^<]*</string>" "%File%"') Do (
                        rem Проверка на отступ перед тэгом, замена значения
                        Echo.%%A|Find "string">nul&&(
                                Echo ^<%%A^>%NewValue%^<%%C^>
                        )||(
                                Echo %%A^<%%B^>%NewValue%^<%%D^>
                        )
                )
        )
)>>"%Out%"
Pause



Время: 18:09.

Время: 18:09.
© OSzone.net 2001-