Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 表达式必须计算为节点集意味着什么?_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

Xml 表达式必须计算为节点集意味着什么?

Xml 表达式必须计算为节点集意味着什么?,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我有以下代码 <!-- 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-

我有以下代码

 <!-- 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()
System.Xml.Xsl.Xsl异常
HResult=0x80131942
Message=表达式必须计算为节点集。
Source=System.Private.Xml
堆栈跟踪:
位于System.Xml.Xsl.Runtime.XsltConvert.EnsureNodeSet(IList`1列表项)
在System.Xml.Xsl.XmlILCommand.Execute(对象defaultDocument、XmlResolver数据源、XslTargetList argumentList、XmlSequenceWriter结果)
在System.Xml.Xsl.XmlILCommand.Execute(对象defaultDocument、XmlResolver数据源、XslTargetList argumentList、XmlWriter)
在System.Xml.Xsl.xslcomiledTransform.Transform(IXPathNavigable输入、XSLTargetList参数、XmlWriter结果、XmlResolver documentResolver)
在System.Xml.Xsl.xslcomiledtransform.Transform(IXPathNavigable输入、XsltArgumentList参数、XmlWriter结果)
在中的WZDxConversion.Controllers.ValuesController.Post()处--------------------------------------------------------
位于Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(对象目标,对象[]参数)
位于Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper映射器、ObjectMethodExecutor执行器、对象控制器、对象[]参数)
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d_u12.MoveNext()中

我不确定您为什么会收到此代码片段的错误,但我可以告诉您错误消息的含义

使用路径表达式(如
$X/Y
)时,“/”运算符左侧的表达式必须计算为节点集,节点集是XSLT 1.0和XPath 1.0中为数不多的基本数据类型之一。(在其他一些地方,值必须是节点集,但最常见的是左撇子“/”

例如,当使用xsl:variable时,没有选择属性

<xsl:variable name="v">
  <a><b/></a>
</xsl:variable>


这意味着XSL工作组期望XSLT1.0会很快被XSLT1.1取代,从而取消这些限制;他们从未想到20多年后还会有人使用XSLT1.0。XSLT2.0当然取消了这一限制,但微软从未实现过。

这只是一个转录错误。是的,我使用的是.NET,但是错误在XSLT 1.0处理器中很常见,XslCompiledTransform是这样的:如果您创建了一个结果树片段,然后尝试在其上使用XPath,那么您首先需要使用
exsl:node set($var)
将结果树片段转换为一个节点集。这种限制在XSLT2或3处理器(如Saxon 9或XmlPrime)中不存在。