【发布时间】:2020-01-03 16:48:57
【问题描述】:
我有以下代码。
<!-- Error func -->
<xsl:template name="myFunc">
<xsl:param name="person"/>
<xsl:variable name="name">
"name": "<xsl:value-of select="$person/name"/>",
</xsl:variable>
<xsl:value-of select="$name"/>
</xsl:template>
<!-- Call function -->
<xsl:template match="/">
<xsl:call-template name="myFunc">
<xsl:with-param name="person" select="list/person"/>
</xsl:call-template>
</xsl:template>
我正在将变量用于更复杂的事情,但到目前为止,我什至无法让这一点工作。有什么理由吗?我不断收到以下错误
System.Xml.Xsl.XslTransformException
HResult=0x80131942
Message=Expression must evaluate to a node-set.
Source=System.Private.Xml
StackTrace:
at System.Xml.Xsl.Runtime.XsltConvert.EnsureNodeSet(IList`1 listItems)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlSequenceWriter results)
at System.Xml.Xsl.XmlILCommand.Execute(Object defaultDocument, XmlResolver dataSources, XsltArgumentList argumentList, XmlWriter writer)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results, XmlResolver documentResolver)
at System.Xml.Xsl.XslCompiledTransform.Transform(IXPathNavigable input, XsltArgumentList arguments, XmlWriter results)
at WZDxConversion.Controllers.ValuesController.Post() in --------------------------------------------------------
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()
【问题讨论】:
-
这只是一个转录错误。是的,我使用的是 .NET,但该错误在 xslt 中似乎很常见
-
通常使用 XslCompiledTransform 的 XSLT 1.0 处理器,如果您创建了结果树片段然后尝试在其上使用 XPath,您首先需要将结果树片段转换为节点-设置使用例如
exsl:node-set($var)。 XSLT 2 或 3 处理器(如 Saxon 9 或 XmlPrime)中不存在此限制。