背景
我需要将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);
答案 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
作为模型传递给视图。