1

ここそこからの例に従って、xmlファイルの存在をチェックする.NET xslt拡張オブジェクトを実装しようとしています。また、あまり役に立たなかったいくつかの関連する SO 投稿についても熟考しました。

次のコード スニペットで拡張機能を見つけようとすると、「拡張機能は使用できません」と表示されます。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:XsltExtensionObject="urn:XsltExtensionObject"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
exclude-result-prefixes="msxsl XsltExtensionObject">

...

<xsl:choose>
     <xsl:when test="function-available('XsltExtensionObject:getFile')">
          Extension function is available
     </xsl:when>
     <xsl:otherwise>
          Extension function  is not available
     </xsl:otherwise>
</xsl:choose>

...

次のように、同じ VS 2012 ソリューション内に XsltExtensionObject という名前の別のクラス ライブラリを作成しました (最初の例と一致するように VB で t を実行しました)。

Public Class FileExist
    Private exist As Boolean
    Public Sub New()
        exist = False
    End Sub
    Public Function getFile(ByVal myFile As String) As Boolean
        exist = System.IO.File.Exists(myFile)
        Return exist
    End Function
End Class

次のように xsl 変換を実行します。

    protected void Page_Load(object sender, EventArgs e)
    {
        XmlDocument xmldoc = new XmlDocument();
        XslCompiledTransform xslt = new XslCompiledTransform();
        xslt.Load(MapPath("homepage.xslt"));
        XsltArgumentList xslArgs = new XsltArgumentList();
        XsltExtensionObject.FileExist obj = new XsltExtensionObject.FileExist();
        xslArgs.AddExtensionObject("urn:XsltExtensionObject", obj);
        xmldoc.Load(MapPath("lists.xml"));
        StringWriter sw = new StringWriter();
        xslt.Transform(new XmlNodeReader(xmldoc), null, sw);
        content.InnerHtml = sw.ToString();
    }

拡張子が見つからないのはなぜですか?ここで何が欠けていますか?アセンブリ参照?

4

1 に答える 1