2014-02-06 18 views
-2

我已搜索,發現,嘗試並失敗!在批處理文件中解析xml並使用curl上傳返回的值

無論如何,我確定這裏有人能夠協助。

我需要從位於Web服務器上的xml中提取一個值,然後將返回的值上傳到另一個服務器。我可以理解的捲曲位,但多數民衆贊成在它。

所需的值來自名爲「S - 室內溫度」的傳感器和值標籤中的值。下面的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

的問題是不明確的。每個服務器獲得的值和輸出應該是什麼。在您的xml中沒有「S - 室內傳感器」測試。 –

+0

對不起我的錯誤「S-室內溫度」 – user3281096

回答

0

請參閱下面的代碼。它首先檢測傳感器名稱「S - 室內溫度」。它被發現 - 然後它尋找標籤「」。如果找到 - 值被採用並回顯:「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! 
) 
) 
+0

感謝您的回覆。這似乎是第一個答案的不同方法。無論如何..很奇怪,但價值回報是整個行,除了標籤????? '值= {B189A2C9-D66C-44C9-BE7C-62AEBF9E6166}的S - 室內溫度 + 015.3C 15.3 ' – user3281096

+0

看起來是diplaying的當它找到標記時,整個文件內容。請確保每行只有一個標籤/標籤對,每行的末尾有CRLF。在我的機器上顯示:C:\ Temp> script.bat value = 15.3 value = 1.3 –

+0

我設法通過複製上面的數據並創建文件並使其工作,錯了!!我的錯。我已經在上面添加了正確的數據。感謝您的幫助 – user3281096

0

我用的S - 室內溫度爲字符串找到。將其更改爲符合您的規格。

@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 
) 
+0

你好,非常感謝您的回覆。我已經嘗試了以上,但批處理文件不會回顯該值。它只是終止。我嘗試過搜索多個相似的代碼但沒有成功。 - 從我可以與你提供的代碼進行互操作的東西,你確切地理解了我所追求的。 – user3281096