방금 MVC3에 표시 할 XML을 HTML로 변환하는 사이트를 만들었습니다. 컨트롤러가 사용할 XML 및 XSLT 파일을 결정하고이를 모델에 전달하는 두 번째 기법을 사용했습니다. 보기의 HTML 도우미는 실제로 변환을 수행합니다.
이 경우 나는 회의 프로그램을 렌더링하고 있습니다. 따라서 Program
은 아래를 참조합니다. 스타일 시트에 매개 변수를 제공 할 수 있습니다. 아래에서는 생성 된 HTML에서 링크로 변환 될 매개 변수로 기본 URL을 제공합니다.
모델 :
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>();
}
}
컨트롤러 :
[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);
}
헬퍼 :
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());
}
}
}
보기 :
<div data-role="content">
@Html.RenderXml(Model.ProgramFilename, Model.StylesheetFilename, Model.Parameters)
</div>
이것을위한 해결책을 찾았습니까? 너 무슨 짓을 한거야? – XtremeBytes