Error message in XSLT with C# extension function

前端 未结 2 532
故里飘歌
故里飘歌 2021-01-13 02:41

I am received the following error while trying to implement a C# extension function in XSLT.

Extension function parameters or return values which have

相关标签:
2条回答
  • 2021-01-13 03:25

    XSLT extension methods must return a type that is supported within XSL transformations. The following table shows the W3C XPath types and their corresponging .NET type:

    W3C XPath Type        | Equivalent .NET Class (Type)
    ------------------------------------------------------
    String                | System.String
    Boolean               | System.Boolean
    Number                | System.Double
    Result Tree Fragment  | System.Xml.XPath.XPathNavigator
    Node Set              | System.Xml.XPath.XPathNodeIterator
    

    The table is taken from the section Mapping Types between XSLT and .NET in this MSDN Magazine article.

    Instead of returning a string[] array you would have to return an XPathNodeIterator like it is done in the following example:

    <msxsl:script implements-prefix="extension" language="C#">
    <![CDATA[
    
    public XPathNodeIterator GetList(string str, string delimiter)
    {
        string[] items = str.Split(delimiter.ToCharArray(), StringSplitOptions.None);
        XmlDocument doc = new XmlDocument();
        doc.AppendChild(doc.CreateElement("root"));
        using (XmlWriter writer = doc.DocumentElement.CreateNavigator().AppendChild())
        {
            foreach (string item in items)
            {
                writer.WriteElementString("item", item);
            }
        }
        return doc.DocumentElement.CreateNavigator().Select("item");
    }
    ]]>
    </msxsl:script>
    

    In your XSL transform you can then iterate over the elements in the returned node set using xsl:for-each:

    <xsl:template match="/">
        <root>
            <xsl:for-each select="extension:GetList('one,two,three', ',')">
                <value>
                    <xsl:value-of select="."/>
                </value>
            </xsl:for-each>
        </root>
    </xsl:template>
    
    0 讨论(0)
  • 2021-01-13 03:29

    From http://msdn.microsoft.com/en-us/library/533texsx(VS.71).aspx

    The supplied arguments and return values defined by the script functions must be one of the W3C XPath or XSLT types. The following table shows the corresponding W3C types, the equivalent .NET classes (Type), and whether the W3C Type is an XPath Type or XSLT Type.

    0 讨论(0)
提交回复
热议问题