我是一位初學者,編寫批處理腳本時非常讚賞您的幫助。提取XML標記值(基於標記)使用批處理
下面是XML和我需要提取標誌爲「開」到一個txt文件中的所有名稱。還有其他幾個類別標籤實例。
<Head>
<Category
name="RIVERTD"
flag="on"
location="SG002">
</Category>
<Category
name="BRETRED"
flag="on"
location="IT213">
</Category>
<Category
name="AMERAND"
flag="off"
location="US212">
</Category>
</Head>
所以,我在找的輸出如下
RIVERTD
BRETRED
我嘗試使用下面的代碼
@echo off
setlocal disableDelayedExpansion
set input="CP.xml"
set output="Names.txt"
if exist %output% del %output%
for /f "delims=" %%A in ('findstr /n /c:"name=" %input%') do (
set "ln=%%A"
setlocal enableDelayedExpansion
call :parseLine
endlocal
)
type %output%
exit /b
:parseLine
set "ln2=!ln:*name=!"
if "!ln2!"=="!ln!" exit /b
for /f tokens^=2^ delims^=^" %%B in ("!ln2!") do (
setlocal disableDelayedExpansion
>>%output% echo(%%B
endlocal
)
set "ln=!ln2!"
goto :parseLine
這給我結果
RIVERTD
BRETRED
AMERAND
然而此代碼不會過濾基於fla的名稱G。我是初學者。請幫助添加基於標誌的過濾器。非常感謝。
是誰在持有該槍到你的腦袋,讓你試圖用.BAT文件解決這個問題?如果您能以某種方式壓倒他們並重獲自由,那麼請考慮使用更合適的工具(如XSLT或XPath庫)來解決此問題。或者也許我們應該派遣一名人質談判員來解決這個問題?請指教。 –
@ C.M.Sperberg-McQueen:我不理解那些批評批處理文件但不知道其功能的人。我非常肯定,沒有XSLT和XPath解決方案,也沒有任何其他語言/包解決方案,可以比我下面的6行批處理解決方案更簡單... – Aacini
@Aacini,你可能是對的。 (但是爲了比較,在這裏檢索名稱的XPath表達式是'Category [@ flag ='on']/@ name';這不包括像選擇文件那樣的非XPath開銷,所以實際上它不是必須總是一行一行。) –