ここに純粋なbatch-fileソリューションがあります。次のスクリプトでは、3つのコマンドライン引数(XMLファイルへのパス)、ノード(例ではslideshow
)、属性名(date
)が指定された順序で必要です。戻りデータはコンソールウィンドウに出力され、ファイルにリダイレクトされます(>
)。
この
は、(スクリプトが
extract-xml-attrib.bat
命名され、
presentation.xml
と呼ばれるXMLファイルを想定し、得られたデータは、
attr.txt
に書き込まれている)スクリプトを実行するためのサンプルコマンドラインです:
"extract-xml-attrib.bat" "presentation.xml" "slideshow" "date" > "attr.txt"
はこれがありますスクリプトのコードextract-xml-attrib.bat
:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "XML=%~1"
set "TAG=%~2"
set "PAR=%~3"
rem // Define defaults here:
if not defined XML set "XML=presentation.xml"
if not defined TAG set "TAG=slideshow"
if not defined PAR set "PAR=date"
set "FLAG="
for /F usebackq^ delims^=^ eol^= %%L in ("%XML%") do (
set "LINE=%%L"
setlocal EnableDelayedExpansion
set "REST=!LINE:*<%TAG%=!"
if not defined REST (
set "FLAG=#"
) else (
set "REST=!LINE:*<%TAG% =!"
if not "!REST!"=="!LINE!" (
set "FLAG=#"
) else (
set "REST=!LINE:*<%TAG% =!"
if not "!REST!"=="!LINE!" (
set "FLAG=#"
)
)
)
for /F "tokens=1,2 delims=>" %%E in ("!REST!/") do (
if defined FLAG (
endlocal
set "FLAG=#"
) else (
endlocal
)
set "REST=%%E"
if defined FLAG (
call :GET_ATTR "REST:~,-1" "%PAR%"
)
if not "%%F"=="" (
set "FLAG="
)
setlocal EnableDelayedExpansion
)
endlocal
)
endlocal
exit /B
:GET_ATTR var_string param_name
setlocal DisableDelayedExpansion
set "PAR=%~2"
setlocal EnableDelayedExpansion
set "STR=!%~1!"
set "NEXT="
for %%S in (!STR!) do (
if defined NEXT (
endlocal
echo(%%~S
set "NEXT="
setlocal EnableDelayedExpansion
)
set "STR=!STR:*%%S=!"
if "%%S"=="%PAR%" (
if defined STR (
if "!STR:~,1!"=="=" (
if "!STR:~1,1!"==" " (
echo(
) else if "!STR:~1,1!"==" " (
echo(
) else (
set "NEXT=#"
)
)
)
)
)
if defined NEXT echo(
endlocal
endlocal
exit /B
純粋なバッチスクリプトではXMLファイルを解析できません。 XMLをネイティブにサポートする言語(PowerShell、VBScript、JavaScriptなど)を使用することをお勧めします。このためにバッチファイルが必要な場合は、別の言語を組み込むこともできます。これも欲しくない場合は、通常のテキストとしてXMLファイルを読む必要があります。 – aschipfl