[英]Retrieving HTML generated using XSLT through AJAX in Umbraco
I am new to Umbraco, just want to get input on if the following is the way to go to retrieve HTML generated using XSLT through AJAX.
创建生成 HTML 的 XSLT 宏
将 XSLT 宏放在空白页中
使用 AJAX 调用页面
有一个更好的方法吗?
我可以在 .NET 代码中以编程方式运行 XSLT 宏并返回结果吗? 这样我就不必将 XSLT 宏放在空白页上。
您可以尝试umbraco.library.RenderMacroContent
来渲染 Xslt 宏。
http://our.umbraco.org/wiki/reference/umbracolibrary/rendermacrocontent
这是我用来在 Umbraco 中为 XSLT 宏获取 HTML 的代码。 设置一个 RestExtension 来返回这个内容。 代码没有经过精炼和硬编码。 我从 xsltVisualize.aspx.cs 偷了这个
public static string GetMacroContent()
{
HttpRequest post = HttpContext.Current.Request;
Member umbMember = Member.GetCurrentMember();
string macroname = post["macroname"];
string content = string.Empty;
if(Member.IsLoggedOn() && !string.IsNullOrEmpty(macroname))
{
string xslt = "";
System.IO.StreamReader xsltFile =
System.IO.File.OpenText(
IOHelper.MapPath(SystemDirectories.Root + "/xslt/htmlcontent.xslt")
);
xslt = xsltFile.ReadToEnd();
xsltFile.Close();
// prepare support for XSLT extensions
xslt = macro.AddXsltExtensionsToHeader(xslt);
Dictionary<string, object> parameters = new Dictionary<string, object>(1);
parameters.Add("currentPage", library.GetXmlNodeById("1057"));
// apply the XSLT transformation
string xsltResult = "";
XmlTextReader xslReader = null;
try
{
xslReader = new XmlTextReader(new StringReader(xslt));
System.Xml.Xsl.XslCompiledTransform xsl = macro.CreateXsltTransform(xslReader, false);
xsltResult = macro.GetXsltTransformResult(new XmlDocument(), xsl, parameters);
}
catch(Exception ee)
{
xsltResult = string.Format(
"<div class=\"error\"><h3>Error parsing the XSLT:</h3><p>{0}</p></div>",
ee.ToString());
}
finally
{
xslReader.Close();
}
}
return content;
}
private static XPathNodeIterator GetXmlNodeById(string id)
{
if(UmbracoContext.Current.GetXml().GetElementById(id) != null)
{
XPathNavigator xp = UmbracoContext.Current.GetXml().CreateNavigator();
xp.MoveToId(id);
return xp.Select(".");
}
else
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(string.Format("<error>No published item exist with id {0}</error>", id));
return xd.CreateNavigator().Select(".");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.