我如何将此XSLT重写为C#并获得相同的结果?

时间:2010-07-06 18:46:21

标签: c# xslt umbraco

基本上,我有一些我写过的xslt,我想将相同的功能迁移到C#。我知道我必须使用XPath等,但我无法正确访问正确的节点和属性。

以下是我要翻译的功能:

<xsl:for-each select="$mediaNode/node">
    <xsl:variable name="mediaNodeName" select="translate(@nodeName, '_', '')"/>
    <xsl:if test="Exslt.ExsltStrings:lowercase(substring($mediaNodeName, 1, $MainNodeNameLength)) = Exslt.ExsltStrings:lowercase($MainNodeName)">
        <!-- do stuff with @nodeName and such -->
    </xsl:if>
</xsl:for-each>

这个XSLT模板将$ galleryOf作为参数,它是umbraco xml nodeid的一个int,它需要$ MainNodeName,这是我将在for循环中进行比较的文本。

我只需要一些帮助,找出如何以我在这里使用C#的方式获得每个节点。

这就是我一直在使用的:

    public static string GetGalleryById(int mediaNodeID, string filename)
    {
        string results = "";

        // if node exists then look for images
        if (mediaNodeID > 0)
        {
            // get a node iterator for the media node section passed in
            XPathNodeIterator xni = umbraco.library.GetMedia(mediaNodeID, false);
            xni = xni.Current.SelectChildren("node", "");

            // loop through all of the images in the folder to find ones that match the @param filename
            while (xni.MoveNext())
            {
                string currentName =
                currentName = currentName.Replace("_", "");


            //    // if there's a match then get build the html and add to results
            //    if (currentName.Substring(1, filename.Length).ToLower() == filename.ToLower())


            return results;

        }
        // otherwise, return no result.
        else
        {
            return "Nothing to see here...";
        }
    }

谢谢!

1 个答案:

答案 0 :(得分:0)

我最终只是使用XPathNodeIterator来选择我想要的节点,并且从那里我只使用了一个foreach循环来遍历每个节点。