XSLT Error : sequence of more than one item is not allowed as the value of variable

XSLT Error : sequence of more than one item is not allowed as the value of variable

我有以下xml

<EVT EvtLevel="1">
    <EVT_EX>
        <FIELD1></FIELD1>
    </EVT_EX>
    <SESNUM>10</SESNUM>
    <WORK_ID>WO-001</WORK_ID>
</EVT>

我想检查 EVT 父节点下是否存在 EVT_EX 以外的任何节点 和 SESNUM 并将 true/false 分配给一个变量。假设变量是 filterFlag

如果我通过使用 for-each 在 EVT 下的每个节点上迭代来执行检查,则会收到以下错误

不允许将超过一项的序列作为变量 $filterFlag (false, false, ...)

的值

根据上面的 xml filterFlag 应该有一个真实的值。

对于下面给出的 xml 值应该是 false。

<EVT EvtLevel="1">
    <EVT_EX>
        <FIELD1></FIELD1>
    </EVT_EX>
    <SESNUM>10</SESNUM>
</EVT>

请帮忙

如果您根本不显示您的代码,我们无法判断错误出在哪里,但如果您想要一个布尔值,那么您需要编写一个计算结果为单个布尔值的表达式,而不是一个returns 几个布尔值的序列,所以使用例如<xsl:variable name="others" as="xs:boolean" select="exists(* except (EVT_EX, SESNUM))"/>.

在 XPath 1.0 中:

*[not(self::EVT_EX or self::SESNUM)] and 1

基于 XSLT 1.0 的验证:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="EVT">
    <xsl:value-of select="*[not(self::EVT_EX or self::SESNUM)] and 1"/>
  </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时(在下面列出):

<EVT EvtLevel="1">
    <EVT_EX>
        <FIELD1></FIELD1>
    </EVT_EX>
    <SESNUM>10</SESNUM>
</EVT>

对 XPath 表达式求值并输出该求值的 (correct/wanted) 结果:

false

应用在其他提供的XML文件上:

<EVT EvtLevel="1">
    <EVT_EX>
        <FIELD1></FIELD1>
    </EVT_EX>
    <SESNUM>10</SESNUM>
    <WORK_ID>WO-001</WORK_ID>
</EVT>

再次产生了想要的正确结果:

true