2012-12-11 78 views
3

定義,我用我的.NET(C#)項目XSLT。 我想知道是否可以檢查XSLT模板中,如果一個擴展對象是在(加入)XsltArgumentList定義。檢查擴展對象在XSLT模板

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模板,我想要做的事與擴展對象時,它不是空和別的東西,當它是空值。是否有一些特殊的標記或語法XSLT來完成這個,否則是不可能的呢?

回答

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> 
1

我建議在你的參數列表中添加一個額外的參數來表示它是否爲空或不是。

你可以嘗試不()操作

+0

它也應該工作但@Ian羅伯茨回答更接近我的問題。 – mipe34

+0

我同意,@Ian羅伯茨回答是好。 –