Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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/6.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
Windows批处理文件以删除XML中的某些标记_Xml_Batch File - Fatal编程技术网

Windows批处理文件以删除XML中的某些标记

Windows批处理文件以删除XML中的某些标记,xml,batch-file,Xml,Batch File,我有一个类似于下面的xml文件,我想在其中删除幻灯片的所有xml标记 包括它们的子元素,并使用windows保留父标记,如下所示 批处理文件。这方面有什么帮助吗 现有代码: <?xml version="1.0" encoding="UTF-8"?> <slideshow title="Sample Slide Show" date="Date of publication" author="Yours Truly"> <slide type="all">

我有一个类似于下面的xml文件,我想在其中删除幻灯片的所有xml标记 包括它们的子元素,并使用windows保留父标记,如下所示 批处理文件。这方面有什么帮助吗

现有代码:

 <?xml version="1.0" encoding="UTF-8"?>
<slideshow title="Sample Slide Show" date="Date of publication" author="Yours Truly">

<slide type="all">
    <title>Wake up to WonderWidgets!</title>
</slide>

<slide type="all">
    <title>Overview</title>
    <item>
    Why
    <em>WonderWidgets</em>
    are great
    </item>
    <item/>
    <item>
    Who
    <em>buys</em>
    WonderWidgets
    </item>
</slide>

</slideshow>

醒醒吧!
概述
为什么?
WonderWidgets
很好
谁
买
WonderWidgets
所需代码

 <?xml version="1.0" encoding="UTF-8"?>
<slideshow title="Sample Slide Show" date="Date of publication" author="Yours Truly">

</slideshow>

试试这个:

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET SKIP=FALSE
SET NEEDLE=slideshow

FOR /f "tokens=*" %%i IN (input.xml) DO (
    IF !SKIP! EQU FALSE ECHO %%i
    SET INPUT=%%i

    SET DATA=!INPUT:~1,9!
    IF !DATA! EQU !NEEDLE! SET SKIP=TRUE
    SET DATA=!INPUT:~2,9!
    IF !DATA! EQU !NEEDLE! SET SKIP=FALSE
)

IF !SKIP! EQU FALSE ECHO !INPUT!

ENDLOCAL
@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“打印=1”
(
对于/f“usebackq delims=“%%a in”(“input.xml”)
)do for/f“tokens=1 delims=/”中的%%b(“%%a”
)如果/i“%%~b”==“幻灯片”,则执行此操作(
如果已定义打印(设置“print=”)否则(设置“print=1”)
)如果已定义,则为else打印回显(%%a
)>“output.xml”

它只读取行中的第一个标记,该标记用作开关,以确定行是否必须写入输出。

您确实应该使用为处理XML而构建的工具

但是,使用在stdin上执行正则表达式搜索/替换并将结果写入stdout的方法来提供解决方案并不太困难。REPL.BAT是从XP开始在任何Windows机器上本机运行的纯脚本

使用REPL.BAT的解决方案将比任何纯批量解决方案更健壮、速度更快

如果没有缩写的空幻灯片标签(无
),则以下操作应有效:

键入input.xml | repl“\s*]*)?>([\s\s](?!)*[\s\s]”m>output.xml
如果可能有缩写的空幻灯片标签,那么以下更复杂的正则表达式应该可以工作:

键入input.xml | repl“\s*]*?)?/>(\s[^>]*)?>([\s\s](?!)*[\s\s])“”“m>output.xml

您的努力如何?对不起,Abhi,我不熟悉关于XML文件的批量脚本编写,所以发布在这里。感谢您的指导
@echo off
    setlocal enableextensions disabledelayedexpansion

    set "print=1"
    (
        for /f "usebackq delims=" %%a in ("input.xml"
        ) do for /f "tokens=1 delims=/<> " %%b in ("%%a"
        ) do if /i "%%~b"=="slide" (
            if defined print (set "print=") else (set "print=1")        
        ) else if defined print echo(%%a
    ) > "output.xml"