从批处理中解析xml

苏巴姆·特里帕蒂

我需要解析此xml文件,并通过Windows Batch使用字段的输入。我需要将所有值都放入变量中,我花了好几个小时不停地动脑筋,但无法提出任何有用的信息。有人可以帮忙吗?一个简单有用的提示就足够了。

我需要一个遵循正常编程格式的答案,因为首先需要查看标签,然后是,然后如果有多个我必须在循环中解析它们。

    <USERS>
            <USER> 
                <USERNAME>FT_NRIAPIUSER </USERNAME>
                <PASSWROD>XXXXXXXXXXXXX</PASSWROD>
                <GROUPNAME>-</GROUPNAME>
                <POLICYNAME>-</POLICYNAME>
                <REMARKS>-</REMARKS>
            </USER>
            <USER> 
                <USERNAME>FT_SelfAdmin01</USERNAME>
                <PASSWROD>XXXXXXXXXXXXX</PASSWROD>
                <GROUPNAME>FT_SelfAdmins</GROUPNAME>
                <POLICYNAME>-</POLICYNAME>
                <REMARKS>-</REMARKS>
            </USER>
       </USERS>
<GROUPS>
    <GROUP>
        <GROUPNAME>FT_SelfAdmins</GROUPNAME>
        <POLICIES> 
            <POLICY>
                <POLICYNAME>-</POLICYNAME>
            </POLICY>
        </POLICIES>
        <REMARKS>-</REMARKS>
    </GROUP>
    <GROUP>
        <GROUPNAME>FT_SelfUsers</GROUPNAME>
        <POLICIES> 
            <POLICY>
                <POLICYNAME>-</POLICYNAME>
            </POLICY>
        </POLICIES>
        <REMARKS>-</REMARKS>
    </GROUP>
</GROUPS>
oo
@ECHO Off
SETLOCAL
:: 
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="

:: evaluate command line. Structure is 
:: %1 : filename to be analysed
:: %2 : tag to signal "new data item"
:: %..: other REQUIRED tags
:: then repeat
:: /opt optional tags
:: /block start-analysis tag
:: /seq tags in required output-sequence
::
SET "$filename=%~1"
IF NOT EXIST "%$filename%" ECHO "%~1" NOT found&GOTO :EOF 
SET "$mode=tag"
:tagloop
SHIFT
SET "$=%~1"
IF NOT DEFINED $ GOTO process
IF %$:~0,1%==/ (SET "$mode=%$:~1%") ELSE (CALL SET "$%$mode%=%%$%$mode%%% %~1")
GOTO tagloop
:process

:: start mode OFF in block mode, on otherwise
:: establish tag1 (which signals start-of-next-data-item)
IF DEFINED block (SET "$mode=") ELSE (SET "$mode=Y")
FOR %%z IN (%$tag%) DO IF NOT DEFINED $tag1 SET "$tag1=%%z"
:: default output sequence is requiredtags optionaltags
IF NOT DEFINED $seq SET "$seq=%$tag% %$opt%"
CALL :zapvars
FOR /f "usebackqtokens=*" %%L  IN ("%$filename%") DO (
 FOR /f "tokens=1-3delims=<>" %%a  IN ("%%L") DO IF "%%c"=="" (CALL :lonely "%%a") ELSE (CALL :triplet "%%a" "%%b" "%%c")
 )
)

GOTO :eof

:: One parameter on line - may be start/end of block

:lonely
FOR %%p IN (%$block%) DO IF /i "%%p"=="%~1" (SET "$mode=Y"&CALL :zapvars) ELSE (
 IF /i "/%%p"=="%~1" CALL :output&SET "$mode=")
GOTO :eof

:: presume 3 elements - tag data endtag

:triplet
FOR %%p IN (%$tag1%) DO IF /i "%~1"=="%%p" CALL :output
FOR %%p IN (%$tag% %$opt%) DO IF /i "%~1"=="%%p" SET "$$%%p=%~2"
GOTO :eof

:output
IF NOT DEFINED $mode GOTO zapvars

:: build line for outputting - IF all the required elements are present

FOR %%p IN (%$tag%) DO IF NOT DEFINED $$%%p GOTO zapvars
SET "$line="

FOR %%p IN (%$seq%) DO IF DEFINED $$%%p (CALL SET "$line=%%$line%%,%%$$%%p%%") ELSE (CALL SET "$line=%%$line%%,""")
ECHO %$line:~1%

GOTO zapvars

:zapvars
FOR %%z IN (%$tag% %$opt%) DO SET "$$%%z="
GOTO :eof

嗯-可能会有一些漏洞-因此“出于实验目的”

作为thisbatch文件名requiredtags运行

如果有可选标签,则添加/ opt可选标签

要设置输出字段序列,请添加/ seq标签以输出-默认情况下,使用requiredtags + optionaltags

要仅激活starttag/ starttag之间的输出,请添加/ block标记

处理相当简单。标签名是内建开始envvars中$- $标签$以次等线被认为是两种<tag></endtag><tag>data</endtag>

除此之外,该过程由$mode(在设置时为:输出时)控制,该过程通过block标签的处理进行切换数据被累积到envvars中,$$tagname并且仅在$mode设置swich并且有完整的required标签集的情况下才会输出第一个required标记是特殊的,它控制何时启动新数据项(启动新数据项意味着输出正在累积的前一项)

因此,命令

thisbatch q28540123.txt username passwrod /opt policyname groupname /seq policyname groupname username passwrod  /block users

将提取data <users>..</users>require username passwrod并且可选地policyname groupname,在每次数据中断时username(首先提到的required元素)将按顺序显示数据policyname groupname username passwrod

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从批处理中解析xml

来自分类Dev

使用批处理文件解析xml

来自分类Dev

使用Spring批处理根据属性值解析xml片段

来自分类Dev

批处理脚本解析

来自分类Dev

Windows批处理文件中的日期解析

来自分类Dev

在批处理脚本中解析csv并打印数据

来自分类Dev

Windows批处理文件中的文本解析

来自分类Dev

无法解析批处理文件中的变量

来自分类Dev

在批处理文件中解析协议参数(URL)?

来自分类Dev

在批处理脚本中解析特定文件夹中的大量 .xml 文件时,丢弃一组特定的 .xml 文件

来自分类Dev

批处理-解析Tracert的输出

来自分类Dev

批处理-解析Tracert的输出

来自分类Dev

laravel中的批处理

来自分类Dev

laravel中的批处理

来自分类Dev

配置Spring批处理XML

来自分类Dev

如何解析一个文件夹中的许多XML文件(使用CDATA)并使用Java批处理导入到MySQL?

来自分类Dev

需要从批处理文件中的HTML文档中解析出字符串

来自分类Dev

加速我的批处理文件解析

来自分类Dev

用Javascript解析Gmail批处理响应

来自分类Dev

Windows批处理/从html网页解析数据

来自分类Dev

解析用户输入-批处理脚本

来自分类Dev

逐行解析文件并在批处理中的for循环中增加变量

来自分类Dev

批处理文件:变量在我调用它之前在set命令中解析

来自分类Dev

如何在批处理文件中解析带有特殊定界符的文件?

来自分类Dev

从批处理文件运行的Powershell脚本中,空格键参数解析不正确

来自分类Dev

解析LAPS / ADU&C批处理文件中的字符串变量

来自分类Dev

解析批处理文件中的可执行控制台输出

来自分类Dev

批处理-Findstr中的错误

来自分类Dev

GNUplot中的批处理图

Related 相关文章

热门标签

归档