【发布时间】:2019-03-01 19:35:17
【问题描述】:
在 Stack Overflow 社区的帮助下,我能够从 XML 文档中获取一些数据,并使用以下代码将其添加到列表中。
String URLString = "https://api3.libcal.com/api_hours_grid.php?iid=4246&format=xml&weeks=1&systemTime=0";
XDocument xdoc = new XDocument();
xdoc = XDocument.Load(URLString);
var location = (from p in xdoc.Descendants("location")
from s in p.Descendants("week").Elements()
select new
{
CampusName = (string)p.Element("name"),
WeekD = (string)s.Element("date"),
OpenHours = (string)s.Element("rendered"),
Day = s.Name.LocalName
}).ToList();
这很好用,我可以使用以下内容输出到无序列表
string currentLocation = "";
foreach (var item in location)
{
if (item.CampusName != currentLocation)
{
<h2>@item.CampusName</h2>
currentLocation = @item.CampusName;
}
<ul>
<li>@item.WeekD - @item.OpenHours</li>
</ul>
}
但是,在查看了我的要求后,我觉得使用 HTML 表格会更好地显示数据。我尝试了几种不同的方法使用 String builder 来实现这一点
string dayStop = "Sunday";
StringBuilder sb = new StringBuilder();
sb.Append("<TABLE>\n");
sb.Append("<TR>\n");
foreach (var item in location)
{
if (item.Day != dayStop)
{
sb.Append("<TH>\n");
sb.Append(@item.Day);
sb.Append("</TH>\n");
//dayStop = @item.Day;
}
}
sb.Append("</TR>\n");
sb.Append("<TR>\n");
sb.Append("<TD>\n");
sb.Append(@item.CampusName);
sb.Append("</TD>\n");
sb.Append("<TD>\n");
sb.Append(@item.OpenHours);
sb.Append("</TD>\n");
sb.Append("</TR>\n");
sb.Append("</TABLE > ");
}
Html.Raw(sb)
但它不起作用。我希望 @item.Day 的值填充 TH 的值,但由于我列表中的每个项目都包含每个 @item.CampusName 的值日值,我最终得到一大堆不必要的 @item.Day 值和我觉得 foreach 在这里不是正确的答案。我想要结束的是类似于以下 sn-p;
<table>
<tr>
<th>
Location
</th>
<th>
Sunday
</th>
<th>
Monday
</th>
<th>
Tueday
</th>
</tr>
<tr>
<td>
Campus 1
</td>
<td>
9 - 5
</td>
<td>
9 - 5
</td>
<td>
9 - 5
</td>
</tr>
<tr>
<td>
Campus 2
</td>
<td>
9 - 5
</td>
<td>
9 - 5
</td>
<td>
9 - 5
</td>
</tr>
</table>
【问题讨论】:
-
您是否将字符串生成器输出到 .HTML 文件?你是如何渲染 HTML 的?
-
@TjaartvanderWalt 我正在使用 Html.Raw(sb)
-
你的 xml 包含太多重复的日子,比如星期一来了 6 次,其他日子也一样,那么在这种情况下你的 html 是什么?
-
@DragandDrop 我不太确定我明白你的意思,但我认为答案是现在。这需要放在 razor 文件中并使用类似 Html.Raw(sb) 的东西生成 html 表
-
@IcantCode 如果您使用的是
Html.Raw(sb),那么您使用的是 ASP.NET MVC 对吗?或者至少是 Razor 页面?
标签: c# asp.net-mvc foreach html-table stringbuilder