我在.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是否有一些特殊的标记或语法来实现这一点,或者根本不可能?
答案 0 :(得分: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 :(得分:1)
我建议在ArgumentList中添加一个额外的参数来表示它是否为null。
您可以尝试使用not()运算符