如何查找结束标记行号?

时间:2012-12-20 04:49:02

标签: c# html

我需要帮忙才能找到结束标记行号。例如:

<tr>
  <td>...</td>
  <td>...</td>
</tr>

<tr>
  <td>...</td>
  <td>...</td>

<tr>
  <td>...</td>
  <td>...</td>
</tr>

在上面一行中,第一个<tr>标记相应地打开和关闭。在第二个<tr>中,它已打开但未关闭。在不关闭<tr>的情况下,它会打开第三个<tr>。在这种情况下,我需要将行号显示为错误。我可以找到行号打开标签。我需要找到结束标记行号。我在WPF C#工作。

1 个答案:

答案 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