Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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,我对变量有如下定义 <xsl:variable name="DataType" select="@DataType"/> 这很好用 现在我想用这样的条件设置它的值 <xsl:variable name="DataTypeOverrideType" select="$DataSource/@DataTypeOverrideType"/> <xsl:variable name="DataType"> <xsl:choose>

我对变量有如下定义

<xsl:variable name="DataType" select="@DataType"/>

这很好用

现在我想用这样的条件设置它的值

<xsl:variable name="DataTypeOverrideType" select="$DataSource/@DataTypeOverrideType"/>
<xsl:variable name="DataType">
    <xsl:choose>
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1">
            <xsl:value-of select="$DataTypeOverrideType"/>  
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="@DataType"/>      
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>
<xsl:variable name="DataType">
    <xsl:value-of select="@DataType"/>      
</xsl:variable>
<xsl:when test="$DataType = 'ReachEdit'">
<xsl:when test="$DataType = 9">

但是我;我收到以下错误:

对变量或参数“数据类型”的引用必须计算为节点列表

我也试过最简单的例子,像这样

<xsl:variable name="DataTypeOverrideType" select="$DataSource/@DataTypeOverrideType"/>
<xsl:variable name="DataType">
    <xsl:choose>
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1">
            <xsl:value-of select="$DataTypeOverrideType"/>  
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="@DataType"/>      
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>
<xsl:variable name="DataType">
    <xsl:value-of select="@DataType"/>      
</xsl:variable>
<xsl:when test="$DataType = 'ReachEdit'">
<xsl:when test="$DataType = 9">

但我一直在犯错误:|

在我对定义变量的方式做了更改之后,我尝试使用它,如下所示

<xsl:variable name="DataTypeOverrideType" select="$DataSource/@DataTypeOverrideType"/>
<xsl:variable name="DataType">
    <xsl:choose>
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1">
            <xsl:value-of select="$DataTypeOverrideType"/>  
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="@DataType"/>      
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>
<xsl:variable name="DataType">
    <xsl:value-of select="@DataType"/>      
</xsl:variable>
<xsl:when test="$DataType = 'ReachEdit'">
<xsl:when test="$DataType = 9">

像这样

<xsl:variable name="DataTypeOverrideType" select="$DataSource/@DataTypeOverrideType"/>
<xsl:variable name="DataType">
    <xsl:choose>
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1">
            <xsl:value-of select="$DataTypeOverrideType"/>  
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="@DataType"/>      
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>
<xsl:variable name="DataType">
    <xsl:value-of select="@DataType"/>      
</xsl:variable>
<xsl:when test="$DataType = 'ReachEdit'">
<xsl:when test="$DataType = 9">

有什么办法可以解决这个问题吗


谢谢你

我认为对于您发布的代码段,您不会收到错误消息“引用变量或参数…必须计算到节点列表”,因为您可以像设置变量那样设置变量。但是,该变量是一个结果树片段,具有单个文本子节点,而不是节点集。因此,我怀疑稍后您尝试了类似
..
的操作,然后您会得到错误

很难像您的代码片段那样提出解决方案

<xsl:variable name="DataType">
    <xsl:choose>
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1">
            <xsl:value-of select="@DataType"/>  
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="@DataType"/>      
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>

逻辑上对我来说没有多大意义,无论是
何时
还是
否则
执行select=“@DataType”的
值,所以我想知道除了直接执行
之外,您真正想要实现的是什么

因此,您需要更详细地解释您想要实现什么,然后我们可以建议一种XSLT方法来解决这个问题

[编辑] 也许
就足够了。

这是因为您定义了一个具有RTF(结果树片段)类型的变量。为了将此变量的内容用作常规树,必须首先使用
xxx:node-set()
扩展函数将其转换为常规树,其中前缀
“xxx:”
必须绑定到实现(供应商提供的)命名空间

此外,提供的代码片段没有意义

<xsl:variable name="DataType"> 
    <xsl:choose> 
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1"> 
            <xsl:value-of select="@DataType"/>   
        </xsl:when> 
        <xsl:otherwise> 
            <xsl:value-of select="@DataType"/>       
        </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
<xsl:variable name="DataType"> 
    <xsl:choose> 
        <xsl:when test="$ObeyTypeOverride and $DataTypeOverride = 1"> 
            <xsl:value-of select="@DataType1"/>   
        </xsl:when> 
        <xsl:otherwise> 
            <xsl:value-of select="@DataType2"/>       
        </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
<xsl:variable name="DataType" select=
  "@DataType1[$ObeyTypeOverride and $DataTypeOverride = 1]
  |
   @DataType2[not($ObeyTypeOverride and $DataTypeOverride = 1)]
" /> 


好问题(但你仍然可以提供更多数据),+1。似乎您希望在两个节点之间进行条件选择—这可以通过单个XPath表达式实现,而无需使用任何XSLT条件指令。谢谢,使用了建议的XPath函数,string($DataType)='ReachEdit'和number($DataType)=9,它同时适用于when和where,只适用于示例。。。我编辑了这个问题。。。并显示了后面的用法i;I’我正在处理$DataTypeThank,谢谢你给我指出了错误的正确位置。。(变量的后续用法)我重新编辑了问题。。。希望现在更清楚了,,Tx@Daniel:好的,您可以在比较中只使用:
string($DataType)='ReachEdit'
,相应地:
number($DataType)=9
我不想检查整个XSL并更改对$DataType的所有引用,因为有很多。。。我所需要做的就是有条件地将这个值设置到DataType变量中,直到现在它是这样设置的:并且所有后来对$DataType的引用都工作得很好…@Daniel:如果您提供一个完整(但尽可能小)的示例,我们可以复制,那么我和其他许多人会给您一个很好的解决方案。问题似乎出在您没有向我们展示的代码中。@Daniel:
$submissiontypeoverride
是如何定义的?