用于提取特定XML标记值的批处理文件

时间:2011-11-21 19:59:56

标签: xml batch-file cmd

* *我需要一个仅检索 Data 标记值的批处理文件(没有标记名称),并将其写入.txt文件。此文件可能包含的XML标记多于列出的XML标记。

所以输出应该是:

资本收益是美国收入差距的关键因素 - 赢家背后的力量占据了我们经济体系的全部口号。如果你想在美国赚取均等的收益,你必须提高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>

1 个答案:

答案 0 :(得分:1)

我没有Windows机器,所以请原谅,如果语法稍微偏离,但这样的事情可能会有所帮助,如果数据是您在示例中列出的,尽管您可能需要考虑使用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,所以我感到痛苦。祝好运! :)