11

<LOCATION></LOCATION>XML ファイルからタグの間に「US_NY」のような STRING を抽出するにはどうすればよいですか? FINDSTRで試してみたのですが、改行が問題です。

<?xml version="1.0" encoding="utf-16"?>
<DEVICE>
    <AGENT>
        <VERSION>
            2.0.0.2
        </VERSION>
        <CONNECTION>
            <LOCATION>
                US_NY
            </LOCATION>
            <SERVERIP>
                127.0.0.1
            </SERVERIP>
            <TCPPORT>
                5656
            </TCPPORT>
            <POLLINTERVAL>
                5
            </POLLINTERVAL>
        </CONNECTION>
    </AGENT>
</DEVICE>
4

7 に答える 7

15

XML ファイルを読み取るには、バッチ内で XML.EXE を使用する必要があります。詳細については、http://xmlstar.sourceforge.net/を参照してください。

バッチファイル:

@echo off
for /f %%i in ('XML.EXE sel -t -v "//LOCATION" CP.xml') do set var=%%i
echo LOCATION is %var%

出力:

LOCATION is US_NY
于 2013-11-01T10:31:23.410 に答える
5

これは、外部バイナリを使用せずに xpath 式によって xml ノード/属性値を取得できるようにする xpath.bat -small スクリプトです

あなたの場合、次のように使用できます。

call xpath.bat  "location.xml" "//LOCATION"

または変数に値を代入するには:

for /f "tokens=* delims=" %%a  in  ('xpath.bat  "location.xml" "//LOCATION"') do (
   set "location=%%a"
)

純粋なバッチ ソリューション

 @echo off
        for /f "tokens=1 delims=:" %%L in ('findstr /n "<LOCATION>" some.xml') do ( 
         set begin_line=%%L
        )

        for /f "tokens=1 delims=:" %%L in ('findstr /n "</LOCATION>" some.xml') do ( 
         set /a end_line=%%L+1
        )

        echo showing lines between %end_line% and %begin_line%
        break>"%temp%\empty"
        for /f "delims=" %%l in ('fc "%temp%\empty" "some.xml" /lb  %end_line% /t ^|more +4 ^| findstr /B /E /V "*****" ^| more +%begin_line%') do (
         set "location=%%l"
         goto :break_for
        )
        :break_for
        echo %location%
        del /Q /F "%temp%\empty"

some.xmlxml の名前に置き換えます。

于 2013-11-01T10:35:19.753 に答える
4

(aacini による) ヘルパー バッチ ファイルを使用する場合は、次のようにします。

@echo off
for /f "tokens=*" %%a in ('findrepl /i "<location>" /e:"</location>" /o:+1:-1 ^< "file.xml" ') do echo "%%a"

これは、 https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.batfindrepl.batから呼び出されるヘルパー バッチ ファイルを使用します。

findrepl.batバッチファイルと同じフォルダに配置します。

于 2013-11-01T10:55:05.057 に答える
3

ピュアバッチ -

@ECHO OFF
SETLOCAL
SET "location="&SET "grab="
FOR /f "tokens=*" %%a IN (q19722041.xml) DO (
 IF DEFINED grab SET location=%%a&SET "grab="
  IF /i "%%a"=="<LOCATION>" SET grab=Y
)
ECHO found location=%location%
GOTO :EOF

ここで、q19722041.xml はソース.xmlファイルです。

于 2013-11-01T12:19:51.987 に答える
1

これを試して:

@echo off
setlocal EnableDelayedExpansion
set lastLine=0
< input.xml (for /F "delims=:" %%a in (
              'findstr /N /C:"<LOCATION>" input.xml') do (
   set /A skip=%%a-lastLine+1, lastLine=%%a+2
   for /L %%i in (1,1,!skip!) do set /P line=
   set /P "line=!line!" & echo:
))

注:答えは、このフォーラムの投稿での答え(おそらく@Aaciniによって与えられた)の適応です: Windows batch FindStr to search for a string and matching line

于 2013-11-01T10:25:10.367 に答える
0

Windows用のsed

sed -n "/<LOCATION>/{n;p}" file.xml

バッチファイルで:

for /f %%a in ('sed -n "/<LOCATION>/{n;p}" file.xml') do set "location=%%a"
echo(%location%
于 2013-11-01T14:00:59.727 に答える