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
我有以下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