2011-11-21 4 views
1

* * 데이터 태그 값 (태그 이름 제외) 만 검색하고 .txt 파일에 기록하는 배치 파일이 필요합니다. 이 파일에는 나열된 것보다 많은 XML 태그가있을 수 있습니다.특정 XML 태그의 값을 추출하는 배치 파일

그래서 출력은 다음과 같아야합니다

자본 이득은 우리 경제 시스템의 모든 진언 소요 소득 US--의 차이 우승자 뒤에 힘의 핵심 요소입니다. 당신도 미국에서 전력을 수입 밖으로하려는 경우에는 15 %의 양도 소득세를 인상해야 **

내 파일은 다음과 같습니다. **

<TABLE> 
Table 30 
<ROW> 
Multiple Rows 
<DATA> 
Capital gains are the key ingredient of income disparity in the US-- and the force 
behind the winner takes all mantra of our economic system. If you want even out 
earning power in the U.S, you have to raise the 15% capital gains tax. 
</DATA> 
</ROW> 
</TABLE> 
+4

그리고 무엇을 시도 했습니까? 코드는 어디에서 실패합니까? – jeb

답변

1

나는 창문이없는 machine, syntax가 조금 어긋나면 용서해주십시오. 그러나 이와 같이 뭔가가 도움이 될 수 있습니다. 데이터가 예제에 나와있는 경우 Powershell을 사용하는 것이 좋습니다. XML을 처리하는 훌륭한 도구가 있으므로

setlocal enabledelayedexpansion 
set start_reading="0" 
set stop_reading="0" 
set your_file_name=%~1 

if EXIST "%your_file_name%.txt" del "%your_file_name%.txt" 

for /f "eol=; tokens=1 delims=" %%c in ('type "%your_file_name_here%.xml"') do (
    set line=%%c 

    @REM Determine if at start of Data Tag 
    for /f "eol=; tokens=1 delims=" %%d in ('echo !line! ^| findstr /i /c:"<DATA>"') do (
    set start_reading="1" 
) 

    @REM Determine if at end of Data Tag 
    for /f "eol=; tokens=1 delims=" %%d in ('echo !line! ^| findstr /i /c:"</DATA>"') do (
    set stop_reading="1" 
) 

    @REM stop reading DATA tag input 
    if "!stop_reading!"=="1" (
    set start_reading="0" 
) 

    @REM skips first line assumed to be <DATA> 
    if "!start_reading!"=="2" (
    echo !line! >> "%your_file_name_here%.txt" 
) 

    @REM Ready to start reading post <DATA> line 
    if "!start_reading!"=="1" (
    set stop_reading="0" 
    set start_reading="2" 
) 

) 

@REM Check results 
type "%your_file_name_here%.txt" 

도움이 필요하시면 알려주세요. 나는 환경에서 일해야만했습니다. 도스가 우리 모두에게 사용하도록 허용했기 때문에 당신의 고통을 느낍니다. 행운을 빕니다! :)

관련 문제