对于我目前正在进行的项目,我得到了一个对象数组,每个对象都包含一个“内容”属性和一个“级别”属性。我需要将此列表转换为 HTML 项目符号列表。例如,如果我得到以下输入(为简单起见,以 JSON 格式显示):
[ {content: "Hey", level: "1"},
{content: "I just met you", level: "2"},
{content: "and this is crazy", level: "2"},
{content: "but here's my number", level: "1"},
{content: "call me, maybe", level: "3"} ]
我需要将其转换为以下 XHTML:
<ul>
<li>Hey</li>
<li>
<ul>
<li>I just met you</li>
<li>and this is crazy</li>
</ul>
</li>
<li>but here's my number</li>
<li>
<ul>
<li>
<ul>
<li>call me, maybe</li>
</ul>
</li>
</ul>
</li>
</ul>
最终产品看起来像这样:
- 嘿
- 刚认识你
- 这太疯狂了
- 但这是我的号码
- 给我打电话,也许(<- 更深一层 - 我认为我无法在 SO 中做到这一点)
有点奇怪的谜题。关于最有效/最容易实现的算法/方法有什么建议吗?我正在用 C# 实现它,但非常欢迎使用另一种语言的示例/想法。
最佳答案
这里的思路是,只要层级大于或等于前一层,就应该嵌套,小于则关闭。
public string BuildLists(List<KeyValuePair<string, int>> pairs)
{
int CurrentLevel = 1;
StringBuilder s = new StringBuilder();
s.Append("<ul>");
foreach (KeyValuePair<string, int> pair in pairs)
{
if(pair.Value > CurrentLevel)
{
//Nest more
for(int i = 0; i < pair.Value - CurrentLevel; i++)
{
s.Append("<li><ul>");
}
}
else if(pair.Value < CurrentLevel)
{
//Close Tags
for(int i = 0; i < CurrentLevel - pair.Value; i++)
{
s.Append("</ul></li>");
}
}
s.Append("<li>" + pair.Key + "</li>");
CurrentLevel = pair.Value
}
//Close everything.
for(int i = 0; i < CurrentLevel - 1; i++)
{
s.Append("</ul></li>");
}
s.Append("</ul>");
return s.ToString();
}
关于c# - 将列表转换为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11992936/