使用批处理脚本增加 XML 文件中的属性值
Increment attribute value in an XML file using batch script
我正在尝试编辑 xml 文件并增加名为 'pageindex' 的属性值。
xml 文件中的数据如下所示
?xml version="1.0" encoding="UTF-8"?>
<quer:query productCode="RC1700" model="http://www.taleo.com/ws/tee800/2009/01" projectedClass="Candidate" locale="en" alias="MainQuery" mode="T-XML" largegraph="true"
preventDuplicates="false" attributes="pageindex=1,pagingsize=350"
xmlns:quer="http://www.taleo.com/ws/integration/query">
<quer:subQueries/><quer:projections>
<quer:projection><quer:field path="Number"/>
</quer:projection><quer:projection><quer:field path="FirstName"/>
这是我创建的批处理脚本,但值“1”没有增加。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_FILE=pagexml" & rem // (input file; `%~1` is the first argument)
set "_INI=<quer:query productCode="RC1700" model="http://www.taleo.com/ws/tee800/2009/01" projectedClass="Candidate" locale="en" alias="MainQuery" mode="T-XML" largegraph="true" preventDuplicates="false" attributes=" &
set "_TAG=pageindex=" & rem // (opening tag)
rem // Loop over all (non-empty) lines of the input file:
(for /F "usebackq delims=" %%L in ("%_FILE%") do (
rem // Store current line string:
set "LINE=%%L"
rem // Toggle delayed expansion to avoid troubles with `!`:
setlocal EnableDelayedExpansion
rem // Split off opening tag from line string:
set "TEST=!LINE:*%_TAG%=!"
rem // Check whether opening tag has been found:
if not "!TEST!"=="!LINE!" (
rem // Opening tag found, hence split off closing tag:
for /F "tokens=1* eol=, delims=, " %%S in ("!TEST!") do (
rem // Get extracted number and increment it:
set /A "NUM=%%S+1"
rem // Return rebuild line with incremented number:
echo( !_INI!!_TAG!!NUM!^,%%T
)
) else (
rem // Opening tag not found, hence return original line:
echo(!LINE!
)
endlocal
))>pageTmp.xml
copy /v /y "pageTmp.xml" "page.xml"
del "pageTmp.xml"
这是我 运行 蝙蝠时得到的输出。您可以看到属性 'pageindex' 没有 return 任何值。
?xml version="1.0" encoding="UTF-8"?>
<quer:query productCode="RC1700" model="http://www.taleo.com/ws/tee800/2009/01" projectedClass="Candidate" locale="en" alias="MainQuery" mode="T-XML" largegraph="true"
preventDuplicates="false" attributes="pageindex=,pagingsize=350"
xmlns:quer="http://www.taleo.com/ws/integration/query">
<quer:subQueries/><quer:projections>
<quer:projection><quer:field path="Number"/>
</quer:projection><quer:projection><quer:field path="FirstName"/>
我该如何解决这个问题?这也是我第一次使用批处理脚本!
第一个问题是您的搜索字符串 _TAG=pageindex=
。
在 set "TEST=!LINE:*%_TAG%=!"
中使用它时,结果为
==1,pagingsize=350"
等号加倍,因为搜索表达式不能包含等号,等号总是用来拆分搜索和替换部分。
您搜索 pageindex
并将其替换为 =
因此 %%S
包含 ==1
而 set /a NUM===1+1
失败
在
中将delims=,
改为delims=,=
即可解决
for /F "tokens=1* eol=, delims=,= " %%S in ("!TEST!") do (
我正在尝试编辑 xml 文件并增加名为 'pageindex' 的属性值。
xml 文件中的数据如下所示
?xml version="1.0" encoding="UTF-8"?>
<quer:query productCode="RC1700" model="http://www.taleo.com/ws/tee800/2009/01" projectedClass="Candidate" locale="en" alias="MainQuery" mode="T-XML" largegraph="true"
preventDuplicates="false" attributes="pageindex=1,pagingsize=350"
xmlns:quer="http://www.taleo.com/ws/integration/query">
<quer:subQueries/><quer:projections>
<quer:projection><quer:field path="Number"/>
</quer:projection><quer:projection><quer:field path="FirstName"/>
这是我创建的批处理脚本,但值“1”没有增加。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_FILE=pagexml" & rem // (input file; `%~1` is the first argument)
set "_INI=<quer:query productCode="RC1700" model="http://www.taleo.com/ws/tee800/2009/01" projectedClass="Candidate" locale="en" alias="MainQuery" mode="T-XML" largegraph="true" preventDuplicates="false" attributes=" &
set "_TAG=pageindex=" & rem // (opening tag)
rem // Loop over all (non-empty) lines of the input file:
(for /F "usebackq delims=" %%L in ("%_FILE%") do (
rem // Store current line string:
set "LINE=%%L"
rem // Toggle delayed expansion to avoid troubles with `!`:
setlocal EnableDelayedExpansion
rem // Split off opening tag from line string:
set "TEST=!LINE:*%_TAG%=!"
rem // Check whether opening tag has been found:
if not "!TEST!"=="!LINE!" (
rem // Opening tag found, hence split off closing tag:
for /F "tokens=1* eol=, delims=, " %%S in ("!TEST!") do (
rem // Get extracted number and increment it:
set /A "NUM=%%S+1"
rem // Return rebuild line with incremented number:
echo( !_INI!!_TAG!!NUM!^,%%T
)
) else (
rem // Opening tag not found, hence return original line:
echo(!LINE!
)
endlocal
))>pageTmp.xml
copy /v /y "pageTmp.xml" "page.xml"
del "pageTmp.xml"
这是我 运行 蝙蝠时得到的输出。您可以看到属性 'pageindex' 没有 return 任何值。
?xml version="1.0" encoding="UTF-8"?>
<quer:query productCode="RC1700" model="http://www.taleo.com/ws/tee800/2009/01" projectedClass="Candidate" locale="en" alias="MainQuery" mode="T-XML" largegraph="true"
preventDuplicates="false" attributes="pageindex=,pagingsize=350"
xmlns:quer="http://www.taleo.com/ws/integration/query">
<quer:subQueries/><quer:projections>
<quer:projection><quer:field path="Number"/>
</quer:projection><quer:projection><quer:field path="FirstName"/>
我该如何解决这个问题?这也是我第一次使用批处理脚本!
第一个问题是您的搜索字符串 _TAG=pageindex=
。
在 set "TEST=!LINE:*%_TAG%=!"
中使用它时,结果为
==1,pagingsize=350"
等号加倍,因为搜索表达式不能包含等号,等号总是用来拆分搜索和替换部分。
您搜索 pageindex
并将其替换为 =
因此 %%S
包含 ==1
而 set /a NUM===1+1
失败
在
中将delims=,
改为delims=,=
即可解决
for /F "tokens=1* eol=, delims=,= " %%S in ("!TEST!") do (