В преобразовании XSLT, как определить, какой тип имеет значение,
то есть, это логическое значение, целое число, двойное число или строка?
Если с XML-документом не связана схема, ответом будет то, что типом всегда является xs:string
, и вопрос не слишком значимый.
Однако правильный вопрос: : С каким из этих типов это совместимо (как castable)?
Это преобразование показывает, как это можно узнать. Это также иллюстрирует элегантность и мощь <xsl:next-match>
:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="text()[. castable as xs:integer]">
<xsl:sequence select="., ' is castable as xs:integer. '"/>
<xsl:next-match/>
</xsl:template>
<xsl:template match="text()[. castable as xs:boolean]">
<xsl:sequence select="., ' is castable as xs:boolean. '"/>
<xsl:next-match/>
</xsl:template>
<xsl:template match="text()[. castable as xs:string]">
<xsl:sequence select="., ' is castable as xs:string. '"/>
<xsl:next-match/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<value>42</value>
желаемый, правильный результат выдается :
42 is castable as xs:string. 42 is castable as xs:integer.