Razor而不是XSLT来转换MVC3 / MVC4应用程序中的XML文档?

时间:2013-02-04 01:25:39

标签: xml asp.net-mvc-3 razor

背景

我需要将XML Document转换为XHTML文档,以便转换为MVC3 Web应用程序中的DOCX。我将围绕XML数据合并段落文本。段落文本是从DB中提取的。在过去,我肯定会使用XSLT来转换XML。但是我现在意识到Razor提供了一个非常引人注目/更好的选择。我的XSLT现在有点生疏了,无论如何我将在我的MVC应用程序中大量使用Razor。 Razor走的路还走吗?

如果剃须刀是要走的路,那么我会很感激如何将控制器包含在内。我最初的伪代码思想是:

  ViewBag.MyXMLDoc = DocXML;    
  var MyDocXHtml = View("XHtmlRazorRenderer", ParagraphTextListModel);

非常感谢。

修改

MyDocument = MyDocument.LoadXML("MyDocXML.xml")    
ViewBag.MyDocument = MyDocument;
var MyDocXHtml = View("XHtmlRazorRenderer", ParagraphTextListModel);

2 个答案:

答案 0 :(得分:2)

我会坚持使用XSLT来完成给定的工作。

请注意,Razor是一个“通用”文本模板引擎,它不会简化正确XML的生成。此外,与LINQ-to-XML相比,遍历具有命名空间的复杂XML对于XPHO来说更加自然和简洁。

生成执行XSLT工作的自定义视图引擎并不太难,就像Razor模板呈现文本和HTML一样。这允许在ASP.NET MVC应用程序的范围内实现XSLT呈现的良好且自然的集成。

答案 1 :(得分:0)

也许你可以创建一个模仿XML结构的ViewModel。

那样......你不依赖于ViewBag ......并且可以遍历viewmodel属性和集合以使用Razor生成HTML。

应该在控制器上创建viewmodel,加载XML然后使用xpath加载viewmodel。

然后,在Razor中,使用ViewModel生成HTML。

希望您的XML不太复杂。

您的ViewModel:

public class MyViewModel{
   public ParsedXMLDoc myXmlData {get; set;}
   public ParagraphTextListModel paragraph {get; set;}
}

在您的控制器中,只需将MyViewModel作为模型传递给视图。