2017-06-13 143 views
-1

文件与HTML代码:Windows批处理带标签

<table> 
 
<tr><th>ID</th><th>NAME</th></tr> 
 
<tr><th>1</th><th>Alex</th></tr> 
 
<tr><th>2</th><th>Andy</th></tr></table>

如何输出数据,而标签与Windows .bat文件? (无VB)

像这样: 1:亚历 2:安迪

由于

+1

为什么你排除VB?这是一种理解xml格式的scfript语言。批处理不是预定的任务。即使您使用第三方工具(如sed,'sed -e“s/<[^>] *> // g”test.xml“)删除标签,输出中仍然包含”IDName“和Alex和Andy前面的数字没有冒号。 – LotPings

+0

所以,第三方是可以的。我会考虑一下。 – Aleksey

+0

考虑使用[xpath.bat](https://github.com/npocmaka/batch.scripts/blob/master/hybrids/jscript/xpath.bat) - >'xpath.bat html.xml // tr/th' – npocmaka

回答

2

我喜欢批次,但诚实:它不是用于处理XML文件的合适的工具。 下面是更多的逻辑的锻炼和痛苦而不是合适的解决方案(但工程至少有一些你的例子...。):

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims=" %%a in (t.txt) do call :process "%%a" 
goto :eof 

:process 
set "line=%~1" 
set flag=0 
set var= 
for /l %%i in (0,1,100) do (
    if "!line:~%%i,1!"=="<" ( 
    set /a "flag+=1" 
    set "var=!var!:" 
) 
    if !flag!==0 set "var=!var!!line:~%%i,1!" 
    if "!line:~%%i,1!"==">" set /a flag-=1 
) 
for /f "tokens=1,2 delims=:" %%b in ("!var!") do echo %%b:%%c 

工作原理:
第一for循环各个过程文本文件的一行(一个接一个)。
子程序按字符处理行。它每次增加flag变量,它会遇到一个<(加上一个:,因为我们知道,(可能)值在它的末尾),并在每个>处减少。因此,如果flag为零,我们就是标签的“外部”,并且可以将该字符添加到变量中。
最后for只是重新格式化var,因为有太多的:(每个标签开始:添加)

+0

我该如何向你寻求更多帮助?我的Skype是axxler – Aleksey

+0

[这里](https://stackoverflow.com/questions/ask)。 – Stephan

+0

@Stephan你可以在你的代码中添加一些评论!我发现这种情况非常有帮助谢谢! – Hackoo