2011-11-21 70 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

我没有窗户机器,所以如果语法稍微有点宽恕,但是这样的事情可能会有所帮助,如果数据与示例中列出的一样,但您可能要考虑使用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" 

让我知道你是否需要帮助。我不得不在DOS环境下工作,DOS是他们让我们使用的所有环境,所以我感到你的痛苦。祝你好运! :)