从Sitecore XSLT帮助程序函数返回项目列表

时间:2010-08-05 17:35:07

标签: extension-methods sitecore

我想从Sitecore中的XSLT帮助函数返回一个项目列表。可以想象这些项目来自内容树中的多个不同位置,因此无法使用简单的XPath表达式。

我怀疑我需要对XPathNodeIterator类做一些事情,但是我无法弄清楚如何创建一个公开列表而不是内容树的连续部分。

我知道我可以返回一个ID列表,然后迭代XSLT中的那些(我正在做的事情),但它很乱,我想摆脱它。有谁知道怎么做?

我正在使用Sitecore 6.2。

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)。

See also