Textpipe Batch替换XML标记,但不替换内容

时间:2014-03-25 20:57:08

标签: xml batch-file csv text replace

我有一组XML并希望用a替换所有标记(包括嵌套标记),以便我可以将每个标记之间的内容视为CSV中的字段

ie)

<name>John doe</name>

我希望只剩下

,John Doe,

xml文件中有200多个不同的标签,因此我无法找到并替换单个标签。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

使用a regular expression search and replace utility like REPL.BAT执行您要求的操作非常简单(快速)。

type file.xml | repl "<.*?>" "," >file.csv

但我怀疑输出会有多大用处。

您可以考虑只添加逗号来结束标记:

type file.xml | repl "</.*?>" "," | repl "<.*?>" "" >file.csv

但我仍然怀疑它会有用。


针对文件夹层次结构中的所有.XML文件执行上述操作:

for /r "c:\rootPath" %F in (*.xml) do type "%F" | repl "</.*?>" "," | repl "<.*?>" "" >"%~dpnF.csv"

如果在批处理脚本中使用,请将所有%更改为%%

答案 1 :(得分:0)

你应该选择dbenhams的答案,但由于我已经完成了写作的大部分内容,所以无论如何我都想发布它。

@echo off
setLocal enableDelayedExpansion
set infile=in.txt
set outfile=out.txt

for /f "delims=" %%a in (%infile%) do call :rtags "%%a"

goto :EOF

:rtags %1
set "line=%~1"
set switch=0
set tag=
:loop
if defined line (
    if "^%line:~0,1%"=="^>" (
        set switch=0
        set tag=%tag%.
    )
    if !switch!==1 set "tag=%tag%%line:~0,1%"
    if "^%line:~0,1%"=="^<" set switch=1
    set "line=%line:~1%"
    goto :loop
)

set "line=%~1"

for %%a in (%tag:.= %) do set line=!line:^<%%a^>=,!

echo !line!>>%outfile%

goto :EOF

可以非常容易地修改以查看一组文件,并输出到不同的文件。