我有一组XML并希望用a替换所有标记(包括嵌套标记),以便我可以将每个标记之间的内容视为CSV中的字段
ie)
<name>John doe</name>
我希望只剩下
,John Doe,
xml文件中有200多个不同的标签,因此我无法找到并替换单个标签。
感谢您的帮助
答案 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
可以非常容易地修改以查看一组文件,并输出到不同的文件。