0

我需要从 XML 文件将一些文本和图像数据(在 html 标记中)显示到 Razor 视图中。例如,我有以下 XML:

<newsitems>
    <news id="1">
         <body>
             <p>lorem ipsum <h2>dolor</h2>.</p>
         </body>
    </news>
</newsitems>

然后我需要将该内部 html 显示到视图中。如果可能的话,请告诉我最好的方法和代码!谢谢。

4

1 回答 1

3

如果有的话,在 MVC 应用程序的目录中创建一个视图模型(这只是用于以易于理解的结构化方式表示数据的类的一个花哨名称)Models,例如:

public class NewsItemViewModel
{
   public int Id { get; set; }
   public string Body { get; set; }
}

在您的控制器中创建一个操作以NewsItemViewModel从 XML 中提取实例。我会使用 LINQ-to-XML。假设您的目录中有一个名为的NewsController控制器Controllers

public class NewsController : Controller
{
    public ActionResult Index()
    {
        // replace XElement.Parse(...) below to your own routine to load the XML file
        var newsItems = (from news in XElement.Parse(@"<newsitems>
<news id=""1"">
     <body>
         <p>lorem ipsum <h2>dolor</h2>.</p>
     </body>
</news>
  </newsitems>").Descendants("news")
         let body = news.Descendants("body").First()
         select new NewsItemViewModel {Id = (int)news.Attribute("id"), Body = body.Value });

        return View(newsItems);
    }
}

NewsController.Index现在为(按照我的示例,那就是)创建一个视图Views/News/Index.cshtml

@model IEnumerable<YourApplicationNameSpace.Models.NewsItemViewModel>

@foreach(var newsItem in Model)
{
      <div class="newsitem">
       @Html.Raw(newsItem.Body)
      </div>
}

几点注意事项:

  1. 我假设您是 XML 的作者,或者信任 XML 的来源。如果您不这样做,我会考虑预处理该NewsItemViewModel.Body属性以去除潜在危险的 HTML 或脚本,以防止恶意内容破坏您的网站或更糟。
  2. 将 HTML 内容包装在XML 中body每个news元素的节点中,CDATA以便 HTML 内容不会破坏您的 XML 文件,从而能够成功解析它。
于 2012-10-25T08:12:46.123 回答