我想从Sitecore中的XSLT帮助函数返回一个项目列表。可以想象这些项目来自内容树中的多个不同位置,因此无法使用简单的XPath表达式。
我怀疑我需要对XPathNodeIterator类做一些事情,但是我无法弄清楚如何创建一个公开列表而不是内容树的连续部分。
我知道我可以返回一个ID列表,然后迭代XSLT中的那些(我正在做的事情),但它很乱,我想摆脱它。有谁知道怎么做?
我正在使用Sitecore 6.2。
答案 0 :(得分:1)
是。根据您想要做的项目选择的性质,有多种方法可以达到此目的。
以下应该做的伎俩
public XPathNodeIterator MyFunction( Item[] itemsToReturn )
{
XmlDocument doc = new XmlDocument();
doc.LoadXml( @"<items />" );
foreach ( Item i in itemsToReturn )
doc.DocumentElement.AppendChild( XmlUtil.NavigatorToNode( Factory.CreateItemNavigator( i ), doc, true, new string[] { "item" }, new string[ 0 ] ) );
XPathNavigator nav = doc.CreateNavigator();
return nav.Select( "/items/*" );
}
我没有时间对此进行全面测试,但它应该向您发送正确的方向: - )
答案 1 :(得分:0)
我会坚持使用ID,但可能会将它们作为XML结构而不是要解析的字符串返回。 XPathNodeIterator方法可能会干扰页面编辑器中的内联编辑,以及其他XSL扩展(如生成URL)。