从哈希表中语义获取数据

时间:2016-11-19 19:52:04

标签: c# hash semantics semantic-ui semantic-markup

我将使用C#创建一个哈希表,并在此哈希表的每个销售中存储一些Html标记。然后,我想编写一个算法来从Hash表中读取代码,并在输出中以语义和正确的方式演示它们。

例如:如果我的哈希表中有这样的东西:

<html>|<title>|</head>|</html>|</title>|<head>|...
-----------------------------------------------------

最终输出将是正确的输出:

<html>
<head>
<title>

</title>
</head>
</html>
...

通过这种方式,我有三个主要问题:

  1. 如何将代码存储在哈希表中?
  2. 如何从语义上读取哈希表中的代码?
  3. 有更好的方法或更简单的方法吗?
  4. 我将感激,如果你告诉我你的想法,如果你的观点中缺少一些信息,请告诉我,我会提供这些信息,以便更好地帮助我。

    提前致谢

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题是正确的,那么您似乎无法正常处理标签,然后您想要正确地订购它们。这样做并不容易......

让我尝试构建一个正是这样做的系统,然后你会看到隐藏在后面的所有复杂性。

每个标签都必须用密钥表示。标签要么打开(例如<html>),要么关闭(例如</html>),要么为空(例如<html />)。前两个表单必须成对出现,因此记住这两个表单似乎没有意义 - 无论如何,缺少结束标记是一个错误,您可能决定自动更正此类错误。

因此,您可以描述具有结构的标记(Tag,RequiresClose),然后构建一个映射string -> bool的哈希表或字典,其中布尔值表示标记是否需要相应的结束标记:

<html>|<title>|</head>|</html>|</title>|<head>

这些标签会填充字典,如:

html -> true
title -> true
head -> true

然后你需要为这个字典构建一个解释器,它将构造标签的输出序列。下面是解释器的伪代码。

Interpret()
    InterpretHtml()

InterpretHtml()
    if html not present in dictionary then quit
    if dictionary['html'] = false then print <html /> and quit
    print <html>
    InterpretHead()
    InterpretBody()
    print </html>
    remove html from dictionary

InterpretHead()
    if head not present in dictionary then quit
    if dictionary['head'] = false then print <head /> and quit
    print <head>
    InterpretTitle()
    print </head>
    remove head from dictionary

InterpretTitle()
    if title not present in dictionary then quit
    if dictionary['title'] = false then print <title /> and quit
    print <title>
    // somehow find the title and print it
    print </title>
    remove title from dictionary

这种方法很乏味,并且不会产生可预测的输出。

因此,我建议您彻底重新考虑您的任务,并以完全不同的方式进行。由于HTML正在生成分层文档,您可能需要考虑使用堆栈,然后在输入上强制正确的标记顺序。