我有一个包含以下类型元素的XML Schema:
<xs:simpleType name="value">
<xs:union memberTypes="xs:boolean xs:int xs:double xs:string"/>
</xs:simpleType>
示例XML片段将是:
<value>42</value>
在XSLT转换中,如何确定值的类型,即布尔值,整数,双精度或字符串?
答案 0 :(得分:1)
在XSLT转换中,如何确定值的类型, 即,它是布尔值,整数,双精度或字符串吗?
如果没有与XML文档关联的模式,答案是该类型始终为xs:string
,并且问题不太有意义。
但是,正确的问题是:这些类型中的哪一种兼容(可投射)?
此转换显示了如何找到它。它还说明了<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.
答案 1 :(得分:1)
如果您正在使用模式感知转换,则此值元素的类型为xs:int - 实例有效的union的第一个成员类型。
如果您想测试它是哪种类型,请尝试以下方法:
<xsl:choose>
<xsl:when test=". instance of element(*, xs:int)">int</xsl:when>
<xsl:when test=". instance of element(*, xs:boolean)">boolean</xsl:when>
etc
<xsl:choose>