使用批处理文件获取xml标记的内容(更新:获取标记属性)

时间:2014-05-14 13:15:49

标签: xml parsing batch-file

我有以下" file.xml":

<root>
<cities>
        <cityName>paris</cityName>
        <cityName>london</cityName>
        <cityName>...</cityName> 
        ...         
</cities>
<countries>
        <countryName>india</countryName>
        <countryName>japon</countryName> 
        <countryName>...</countryName>  
        ...         
</countries>
<continents>
        <continentName type="geo">asia</continentName>
        <continentName type="geo">america</continentName>
        <continentName type"geo">...</continentName>
        ...     
</continents>
</root>

我想用批处理文件获取指定标记的所有内容以及所有指定标记的属性(键和值)并写入文件。例如,我指定&#34; continentName&#34;在我的批处理文件中,所以我会有一个&#34; file.txt&#34;用:
输入geo asia
type geo america
输入地理位置......

这就是我目前所拥有的(我只获取标签内容,而不是属性):

@echo off    
setlocal enabledelayedexpansion enableextensions
set tag=continentName
set f_xml=file.xml

set tag2=/%tag%

for /f  "tokens=2-4delims=<>" %%a in (%f_xml%) do (
 IF "%%a"=="%tag%" IF "%%c"=="%tag2%" ECHO(%%b>>file.txt
)

2 个答案:

答案 0 :(得分:1)

@ECHO OFF
setlocal enabledelayedexpansion enableextensions
set tag=continentName
set f_xml=q23655846.txt

set tag2=/%tag%

for /f  "tokens=2-4delims=<>" %%a in (%f_xml%) do (
 IF "%%a"=="%tag%" IF "%%c"=="%tag2%" ECHO(%%b
)
GOTO :eof

这应该得到你的输出。我使用了一个名为q23655846.txt的文件,其中包含我的测试数据。

答案 1 :(得分:1)

编辑解决方案已更改为对新规格的回复

我更改了原始批处理程序以完成请求:

@echo off
set tag=continentName
set f_xml=file.xml
(for /F "tokens=3,4 delims=<=>" %%a in ('findstr "\</%tag%\>" %f_xml%') do echo %%~a %%b) > file.txt

这个程序仅使用.xml文件 ,如上所示(我的意思是,在我写这个解决方案时)和这个请求的输出:

geo asia
geo america
geo ...

如果文件被更改(例如插入更多属性,或者不放置任何属性,或者将continentName标记拆分为多行等),或者输出已更改,则以前的解决方案将无效。