* +1000 *
Используйте
number(boolean(.))
По определению стандартной функции XPath number()
это дает ровно {0, 1}
при применении соответственно к {true(), false()}
Осторожно! Если вы используете эту конструкцию для строк , результат будет истинным как для 'false', так и для 'true' , потому что для строки параметры, boolean () имеет значение true, если и только если его длина не равна нулю .
Итак, если вы хотите преобразовать строки , а не логические значения , используйте это выражение:
number(not(. = 'false'))
Ниже приведена проверка на основе XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="number(not(. = 'false'))"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к следующему документу XML :
<t>
<x>true</x>
<y>false</y>
</t>
желаемый, правильный результат получается :
<t>
<x>1</x>
<y>0</y>
</t>