在批处理文件中解析xml并使用curl上传返回的值

时间:2014-02-06 19:38:09

标签: xml parsing batch-file curl

我搜索,发现,尝试过并失败了!

无论如何,我相信这里有人能够提供帮助。

我需要从位于网络服务器上的xml中提取一个值,然后将返回的值上传到另一台服务器。我能理解的卷曲,但就是这样。

所需的值来自名为“S-Indoor Temp”的传感器和值标签中的值。以下xml提取仅显示两个传感器,但服务器大约有50个。不确定这是否重要。

编辑:

<?xml version="1.0"?>
<sensors>
<sensor><id>{B189A2C9-D66C-44C9-BE7C-62AEBF9E6166}</id><name>S - Indoor Temp</name><category>30</category><nativevalue>+015.3C</nativevalue><value>15.3</value><valuetype>string</valuetype><output>False</output></sensor>
<sensor><id>{8C579CED-B256-4CC2-8A35-9F904C48527C}</id><name>S - Outdoor Temp</name><category>30</category><nativevalue>+008.5C</nativevalue><value>8.5</value><valuetype>string</valuetype><output>False</output></sensor>
</sensors>

2 个答案:

答案 0 :(得分:0)

我用S - Indoor Temp作为字符串来查找。更改它以符合您的规格。

@echo off
setlocal enabledelayedexpansion

for /f "Tokens=1 delims=[]" %%a in ('type sensors.xml^|Find /N "S - Indoor Temp"') do (
  set /a num=%%a+2
  for /f "Tokens=2 delims=<>" %%b in ('type sensors.xml^|more +!num!') do echo %%b & goto :eof
)

答案 1 :(得分:0)

请参阅下面的代码。它首先看传感器名称“S - Indoor Temp”。它被发现 - 然后它寻找标签“”。如果找到 - 取值并回显:“echo value =!value!”

@echo off
setlocal enabledelayedexpansion
set nameFound=false
set value=

for /f "tokens=*" %%a in (file.txt) do (
    set value=
    echo "%%a" | find "</sensor>" > nul
    if "!errorlevel!"=="0" set "nameFound=false"

    echo "%%a" | find "<name>S - Indoor Temp</name>" > nul
    if "!errorlevel!"=="0" set "nameFound=true"

    echo "%%a" | find "<value>" > nul
    if "!errorlevel!"=="0" (
        if "!nameFound!"=="true" (
            set value=%%a
            set value=!value:^<value^>=!
            set value=!value:^</value^>=!
            set "nameFound=false"
            echo value=!value!
        )
    )
)

对于您的最新文本格式,请尝试以下代码(更简单):

@echo off
setlocal enabledelayedexpansion

for /f "tokens=1-11 delims=>" %%a in ('type "file.txt" ^| find "<name>S - Indoor Temp</name>"') do (
    set "value=%%k"
    echo !value! ^| find "</value">nul
if "!errorlevel!"=="0" (
    set "value=!value:</value=!"
    echo !value!
)
)
相关问题