Замена значения в xml другим скриптом пакетной обработки

Я новичок в пакетных сценариях, и я просмотрел множество публикаций на SO, чтобы найти ответ, но мне кажется, что ничего не работает. Я пытаюсь прочитать файл XML и извлечь несколько значений, а затем найти строку в том же XML и заменить новую строку, которую я строю. У меня есть следующий код, но когда я запускаю его, test.xml, который я пытаюсь прочитать, перезаписывается.

@echo off > test.xml
setLocal enabledelayedexpansion

Здесь я нахожу значение URL из XML и сохраняю его в текст

 for /f "tokens=2*delims=@" %%a in (test.xml) DO set "text=%%a"&echo "%text%"

Затем я разделяю значение текста, чтобы извлечь IP, порт и имя БД и сохранить их в переменных.

FOR /f "tokens=1,2,3 delims=:" %%a in ("%text%") DO set "IP=%%a"&echo "%IP%"&set "PORT=%%b"&echo "%PORT%"&set "DB=%%c"&echo "%DB%"

Затем я удаляю конечный тег из имени БД

FOR /f "tokens=1 delims=<" %%a in ("%DB%") DO set "SID=%%a"&echo "%SID%"

Затем я установил старые и новые переменные, чтобы найти и заменить текст

SET "old=<xa-datasource-property name="URL">jdbc:oracle:thin:%IP%:%PORT%:%DB%"
echo "%old%"

SET "new=<xa-datasource-property name="ServerName">%IP%</xa-datasource-property><xa-
datasource-property name="PortNumber">%PORT%</xa-datasource-property><xa-datasource-property name="DatabaseName">%SID%</xa-datasource-property>"

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

 for /f "tokens=*" %%a in (test.xml) do (
        set str=%%a
        ECHO str=%%str:!old!=!new!%% >> newFile.xml

    )

Любая помощь приветствуется. Я потратил как 3 дня на это.

Мое содержание test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>

    <xa-datasource>
        <use-java-context>false</use-java-context>
        <jndi-name>Mach9-Gateway-DS</jndi-name> 
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-

class>
        <xa-datasource-property name="URL">jdbc:oracle:thin:@localhost:8080:oracle</xa-

datasource-property>
        <xa-datasource-property name="User">abc</xa-datasource-property>
        <xa-datasource-property name="Password">pwd</xa-datasource-property>
        <isSameRM-override-value>false</isSameRM-override-value>
        <no-recover>true</no-recover>       
        <min-pool-size>10</min-pool-size>
        <max-pool-size>50</max-pool-size>
        <exception-sorter-class-name>
            org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
        </exception-sorter-class-name>
        <track-connection-by-tx>true</track-connection-by-tx>
        <no-tx-separate-pools />
    </xa-datasource>

</datasources>

В приведенном выше файле вместо свойства URL я намереваюсь извлечь IP, port и DB и добавить теги xml для всех трех значений, как в новой строке.

0 ответов

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