Tôi vừa xây dựng một trang web biến XML thành HTML để hiển thị trong MVC3. Tôi đã sử dụng kỹ thuật thứ hai, nơi bộ điều khiển xác định các tệp XML và XSLT để sử dụng và chuyển chúng vào mô hình. Trình trợ giúp HTML trong chế độ xem thực sự thực hiện biến đổi.
Trong trường hợp này, tôi sẽ hiển thị một chương trình hội nghị, vì vậy đó là những gì Program
đề cập bên dưới. Các tham số có thể được cung cấp cho biểu định kiểu; bên dưới, tôi đang cung cấp URL cơ sở làm thông số sẽ được chuyển thành các liên kết trong HTML được tạo.
Mô hình:
public class ProgramModel
{
public string ProgramFilename { get; set; }
public string StylesheetFilename { get; set; }
public Dictionary<string, string> Parameters { get; protected set; }
public ProgramModel()
{
Parameters = new Dictionary<string, string>();
}
}
Bộ điều khiển:
[OutputCache(Duration=1000)]
public ActionResult Index()
{
string xmlFile = Server.MapPath("~/Program.xml");
string xsltFile = Server.MapPath("~/Program-index.xslt");
Response.AddCacheDependency(new CacheDependency(xmlFile), new CacheDependency(xsltFile));
ProgramModel model = new ProgramModel();
model.ProgramFilename = xmlFile;
model.StylesheetFilename = xsltFile;
model.Parameters["baseDayUrl"] = Url.Action("Day");
return View(model);
}
Các helper:
public static class HtmlHelperXmlExtensions
{
/// <summary>
/// Applies an XSL transformation to an XML document.
/// </summary>
public static HtmlString RenderXml(this HtmlHelper helper, string xmlPath, string xsltPath, IDictionary<string,string> parameters)
{
XsltArgumentList args = new XsltArgumentList();
if (parameters != null)
foreach (string key in parameters.Keys)
args.AddParam(key, "", parameters[key]);
XslCompiledTransform t = new XslCompiledTransform();
t.Load(xsltPath);
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
settings.ValidationType = ValidationType.DTD;
using (XmlReader reader = XmlReader.Create(xmlPath, settings))
{
StringWriter writer = new StringWriter();
t.Transform(reader, args, writer);
return new HtmlString(writer.ToString());
}
}
}
Quan điểm:
<div data-role="content">
@Html.RenderXml(Model.ProgramFilename, Model.StylesheetFilename, Model.Parameters)
</div>
Nguồn
2011-10-06 22:14:58
Bạn đã tìm ra giải pháp cho việc này chưa? Bạn đã làm gì? – XtremeBytes