Textpipe批量替换XML标记,但不替换内容
我有一组XML,希望用替换所有标记(包括嵌套标记),这样我就可以将每个标记之间的内容作为CSV中的字段进行查看 (工业工程) xml文件中有200多个不同的标记,因此我无法找到并替换单个标记 感谢您的帮助使用它可以非常简单(快速)地完成您的要求Textpipe批量替换XML标记,但不替换内容,xml,batch-file,csv,text,replace,Xml,Batch File,Csv,Text,Replace,我有一组XML,希望用替换所有标记(包括嵌套标记),这样我就可以将每个标记之间的内容作为CSV中的字段进行查看 (工业工程) xml文件中有200多个不同的标记,因此我无法找到并替换单个标记 感谢您的帮助使用它可以非常简单(快速)地完成您的要求 type file.xml | repl“”,“>file.csv 但我怀疑这些产出是否会有多大用处 您可以考虑只添加一个逗号来关闭标签: type file.xml | repl "</.*?>" "," | repl "<.*?&
type file.xml | repl“”,“>file.csv
但我怀疑这些产出是否会有多大用处
您可以考虑只添加一个逗号来关闭标签:
type file.xml | repl "</.*?>" "," | repl "<.*?>" "" >file.csv
键入file.xml | repl“”,| repl“”>file.csv
但我仍然怀疑它是否有用
要针对文件夹层次结构中的所有.XML文件执行上述操作:
for /r "c:\rootPath" %F in (*.xml) do type "%F" | repl "</.*?>" "," | repl "<.*?>" "" >"%~dpnF.csv"
对于/r“c:\rootPath”%F in(*.xml)请键入“%F”| repl“”,“|repl“”>”%~dpnF.csv
如果在批处理脚本中使用,请将所有
%%
更改为%%
。您应该使用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
@echo关闭
setLocal enableDelayedExpansion
设置infle=in.txt
设置outfile=out.txt
对于/f“delims=“%%a in(%infle%)do call:rtags”%%a”
后藤:EOF
:rtags%1
设置“行=%~1”
设置开关=0
设置标签=
:循环
如果定义行(
如果“^%行:~0,1%”==“^>”(
设置开关=0
设置标记=%tag%。
)
if!switch!==1设置“tag=%tag%%行:~0,1%”
如果“^%行:~0,1%”=="^不幸的是,我对代码不是很在行,所以我能一次完成一批文件吗?我需要处理大约60K个XML。XML中还有一些其他标记,比如,这也会捕获这些标记并返回100,如果没有用,我要做的就是提取所有非代码信息从XML文件中删除标记,否则我真的找不到一个简单的方法。@user2813634-我更新了答案,以展示如何将代码应用于许多文件。当然,代码不会保留标记属性,因为您没有要求。我想可以添加更多代码来实现这一点,但这只是一个非常简单的过程的开始滑坡。使用此策略可能会遇到更多问题。为此,您最好使用xml编辑器。
type file.xml | repl "</.*?>" "," | repl "<.*?>" "" >file.csv
for /r "c:\rootPath" %F in (*.xml) do type "%F" | repl "</.*?>" "," | repl "<.*?>" "" >"%~dpnF.csv"
@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