将列表转换为 XML
Posted
技术标签:
【中文标题】将列表转换为 XML【英文标题】:Converting a list into XML 【发布时间】:2012-08-13 03:26:21 【问题描述】:对于我目前正在进行的一个项目,我得到了一个对象数组,每个对象都包含一个“内容”属性和一个“级别”属性。我需要将此列表转换为 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# 实现这个,但是用另一种语言的例子/想法会更受欢迎。
【问题讨论】:
我很难不反对使用 call me maybe 歌词。 :) 你想要 HTML 还是 XML? @jrummell:我最终会想要 HTML,但如果有办法使用 XML 技术生成它,我相信我也可以构建它。 首先查看 C# 类 XmlDocument(因为您在 C# 下发布了此内容)。链接有它的 Microsoft 文档。此外,一个简单的谷歌搜索会出现很多关于如何做到这一点的例子。 Here's one @DougRamsey 你只需要大约 100 个代表就可以重新制作...我的意思是,编辑,歌词。 :) 【参考方案1】:这里的思路是,只要层级大于等于前一个,就应该嵌套,如果小于,就应该关闭。
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();
【讨论】:
我没有投反对票,但我猜投反对票的人这样做是因为您的解决方案缺少关闭一些标签。它产生以下输出:<ul><li>Hey</li><li><ul><li>I just met you</li><li>and this is crazy</li></li></ ul><li>but here's my number</li><li><ul><li><ul><li>call me, maybe</li></ul>
这不是 OP 想要的,并且由于您尚未关闭您的 <ul>
s 而无效。您是否针对给定的输入测试了您的代码?
@DarinDimitrov 我忘了交换关闭标签的顺序。已编辑。
+1 表示一个可靠的想法。我想我可以解决这个问题。就像 Darin Dimitrox 提到的那样,它并没有完全产生正确的输出,但它给了我追求的线索。以上是关于将列表转换为 XML的主要内容,如果未能解决你的问题,请参考以下文章