我需要帮忙才能找到结束标记行号。例如:
<tr>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>...</td>
<td>...</td>
<tr>
<td>...</td>
<td>...</td>
</tr>
在上面一行中,第一个<tr>
标记相应地打开和关闭。在第二个<tr>
中,它已打开但未关闭。在不关闭<tr>
的情况下,它会打开第三个<tr>
。在这种情况下,我需要将行号显示为错误。我可以找到行号打开标签。我需要找到结束标记行号。我在WPF C#工作。
答案 0 :(得分:2)
解析时需要将它们放在“堆栈”上。打开标签时推送到堆栈,当关闭标签发生时按相反顺序删除。如果close-tag&lt;&gt;打开标签类型你有错误。
解析时计算行数并在发生不匹配时计算您所在的行号。通过计算换行来计算行号(Windows / Linux为char 10,Mac为13)。
将结束标记与"/" + opening-tag
Stack(pesudo-representation表示“机制”):
Parser res Current stack
---------- -------------
Found TR -> TR
Found TD -> TR-TD
Found /TD -> TR (it matched last tag on stack)
Found TD -> TR-TD
Found /TD -> TR (it matched last tag on stack)
Found /TR -> (it matched last tag on stack - stack is empty, all ok)
Found TR -> TR
Found TD -> TR-TD
Found /TD -> TR (it matched last tag on stack)
Found TD -> TR-TD
Found /TD -> TR (it matched last tag on stack)
Found TR -> TR (mismatch! /+TR <> TR as expected), print error + line number