简体   繁体   English

使用批处理脚本增加 XML 文件中的属性值

[英]Increment attribute value in an XML file using batch script

I am trying to edit an xml file and increment an attribute value called 'pageindex'.我正在尝试编辑 xml 文件并增加一个名为“pageindex”的属性值。

The data in the xml file looks like this 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"/> 

This is the batch script I created but the value '1' is not getting incremented.这是我创建的批处理脚本,但值“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"

This is the output I get when I run the bat.这是我运行蝙蝠时得到的 output。 You can see that the attribute 'pageindex' does not return any value.您可以看到属性“pageindex”没有返回任何值。

?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"/>

How do I fix this?我该如何解决? Also this is my first time working with a batch script!这也是我第一次使用批处理脚本!

The first problem is your search string _TAG=pageindex= .第一个问题是您的搜索字符串_TAG=pageindex=
When using it in set "TEST=:LINE:*%_TAG%=!"set "TEST=:LINE:*%_TAG%=!"中使用它时, this results to ,这导致

==1,pagingsize=350"

The equal sign is doubled, because the serach expression can't contain an equal sign, the equal sign is always used to split the search and replace part.等号加倍,因为 serach 表达式不能包含等号,所以总是用等号来分割查找和替换部分。
You search for pageindex and replace it with =您搜索pageindex并将其替换为=

Therefore %%S contains ==1 and set /a NUM===1+1 fails因此%%S包含==1set /a NUM===1+1失败

You can solve it by changing delims=, to delims=,= in您可以通过将delims=,更改为delims=,= in 来解决它

for /F "tokens=1* eol=, delims=,= " %%S in ("!TEST!") do (

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM