Это связано с тем, что вы определяете переменную типа RTF (Result-Tree-Fragment) . Чтобы использовать содержимое этой переменной в качестве обычного дерева, сначала необходимо преобразовать его в обычное дерево, используя функцию расширения 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>
В таком случае в XPath 1.0 можно определить переменную без создания RTF :
<xsl:variable name="DataType" select=
"@DataType1[$ObeyTypeOverride and $DataTypeOverride = 1]
|
@DataType2[not($ObeyTypeOverride and $DataTypeOverride = 1)]
" />
Обновление : теперь вопрос обновляется исправленным фрагментом и примером фактического использования переменной, которая вызывает сообщение об ошибке.
Поскольку переменная используется в качестве атомарного значения, сообщение об ошибке не должно появляться, если используются следующие выражения XPath:
string($DataType) = 'ReachEdit'
и
number($DataType) = 9