c# - 将列表转换为 XML

标签 c# html xml arrays object

对于我目前正在进行的项目,我得到了一个对象数组,每个对象都包含一个“内容”属性和一个“级别”属性。我需要将此列表转换为 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/

相关文章:

c# - Entity Framework 多对多关系表创建 "backwards"

c# - 通过堆栈的异步/等待行为

c# - 在 code/"refresh"请求中设置 ASP.net executionTimeout

html - 阻止 Bootstrap 4 页脚上升

android - 如何设置布局边距以匹配其他布局起点

c# - 如何将新的 MVC C# 项目与现有的 Web 窗体 VB.NET Web 应用程序项目集成?

jquery - 一种清除 :hover in a drop-down menu on a touch-screen? 的方法

javascript - 将数组从数据库传递到 Controller AngularJs

xml - URI 未在 applicationContext.xml 中注册(设置 | 语言和框架 | 架构和 DTD)

android - 使用上下滑动动画显示/隐藏 View