Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Textpipe批量替换XML标记,但不替换内容_Xml_Batch File_Csv_Text_Replace - Fatal编程技术网

Textpipe批量替换XML标记,但不替换内容

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 "<.*?&

我有一组XML,希望用替换所有标记(包括嵌套标记),这样我就可以将每个标记之间的内容作为CSV中的字段进行查看

(工业工程)

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

感谢您的帮助

使用它可以非常简单(快速)地完成您的要求

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