3

.NET (C#) プロジェクトで XSLT を使用しています。拡張オブジェクトが定義された (追加された) 場合、XSLT テンプレート内でチェックできるかどうかを知りたいですXsltArgumentList

XSLT 名前空間宣言

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:info="urn:info">

C# コード

public string Render(XElement xml, IInfo info) {    
    XsltArgumentList arguments = new XsltArgumentList();   
    if(info != null)
        arguments.AddExtensionObject("urn:info", info);

    var writterSettings = GetWritterSettings();  //omitted details just for simplicity
    var xslt = CreateXslCompiledTransform(); //omitted details just for simplicity            

    StringBuilder sb = new StringBuilder();
    using (XmlWriter writer = XmlWriter.Create(sb, writerSettings))
    {
        using (var itemReader = xml.CreateReader())
        {
            xslt.Transform(itemReader, xsltArguments, writer);
        }
    }
    return sb.ToString();  
}

XSLT テンプレート内で、null でない場合は拡張オブジェクトで何かを行い、null の場合は別のことをしたいと考えています。これを達成するための XSLT 用の特別なタグまたは構文はありますか、それともまったく不可能ですか?

4

2 に答える 2

3

XSLT は関数element-available()を提供しfunction-available()、特定の拡張要素/関数が使用可能かどうかを確認するためのものなので、次のようなものを試してください

<xsl:choose>
  <xsl:when test="function-available('info:myFunction')">
    myFunction is available
  </xsl:when>
  <xsl:otherwise>
    myFunction is not available
  </xsl:otherwise>
</xsl:choose>
于 2012-12-11T17:34:10.557 に答える
1

nullかどうかを示すために、ArgumentListにパラメーターを追加することをお勧めします。

not()演算子を試すことができます

于 2012-12-11T17:11:35.997 に答える