3

我在我的 .NET (C#) 项目中使用 XSLT。我想知道是否可以在 XSLT 模板内部检查是否在 (add to) 中定义了扩展对象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 模板中,我想在扩展对象不为空时对它做一些事情,而在它为空时做一些其他事情。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

我建议在您的 ArgumentList 中添加一个附加参数来表示它是否为空。

你可以试试 not() 运算符

于 2012-12-11T17:11:35.997 回答