【发布时间】:2015-03-26 12:02:34
【问题描述】:
我正在尝试获取 XML 文件中 2 个标签之间的字符串,以适应我在 here 中找到的解决方案。
这是我的批处理文件:
@echo off
setlocal EnableDelayedExpansion
(for /F "delims=" %%a in ('findstr /I /L "<Name>" contacts.xml') do (
set "line=%%a
set "line=!line:*<Name>=!"
for /F "delims=<" %%b in ("!line!") do echo %%b
)) > list.txt
现在当 XML 被格式化时,我得到了所有的名字
<List>
<Contacts>
<Row>
<Name>Carlos</Name>
<Path>\Some\path\1</Path>
<Hidden>False</Hidden>
</Row>
<Row>
<Name>Fernando</Name>
<Path>\Some\path\2</Path>
<Hidden>False</Hidden>
</Row>
<Row>
<Name>Luis</Name>
<Path>\Some\path\3</Path>
<Hidden>False</Hidden>
</Row>
<Row>
<Name>Daniel</Name>
<Path>\Some\path\4</Path>
<Hidden>False</Hidden>
</Row>
</Contacts>
</List>
卡洛斯
费尔南多
路易斯
丹尼尔
但是当 XML(这是它的生成方式)在 1 行时,我只能得到名字
<List><Contacts><Row><Name>Carlos</Name><Path>\Some\path\1</Path><Hidden>False</Hidden></Row><Row><Name>Fernando</Name><Path>\Some\path\1</Path><Hidden>False</Hidden></Row><Row><Name>Luis</Name><Path>\Some\path\1</Path><Hidden>False</Hidden></Row><Row><Name>Daniel</Name><Path>\Some\path\1</Path><Hidden>False</Hidden></Row></Contacts></List>
卡洛斯
我应该对批处理文件进行哪些更改才能正确解析未格式化的 XML 文件?
【问题讨论】:
-
删除
for,并将您的文件视为单行(无论是否使用单个环境变量和goto重复直到找到<Name>。顺便说一句经过辩论是否可以/应该使用正则表达式来解析 HTML/XML...我们将进入下一步...批处理文件!;) 大声笑说真的,您只能在非常受控的情况下执行此操作。空名称可能是<Name/>,字符串可能包含&character;,或者可能有CDATA(至少)。 -
嗨,阿德里亚诺,感谢您的解释,但我需要更多细节,我对这个主题不是很熟练。
-
此处用于拆分:stackoverflow.com/a/14621732/1207195 并读取文件stackoverflow.com/q/15481078/1207195(仅两个示例!不一定是最好的示例)。请注意,它们没有解决我提到的其他问题,因此您可能需要手动完成。作为选项...您是否考虑过从批处理文件调用的 vbscript/jscript 脚本?
-
感谢阿德里亚诺的资源,目前我无法在这个系统中使用除原生批处理之外的任何其他工具。
标签: xml string parsing batch-file