我搜索,发现,尝试过并失败了!
无论如何,我相信这里有人能够提供帮助。
我需要从位于网络服务器上的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>
答案 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!
)
)