2012-12-30 55 views

回答

0

XPath,你可以使用instance of這樣的:XS的

5實例:整數

這個例子,因爲給定值是給定類型的實例返回true 。

有關其他信息,您可以檢查this

1

可以使用FXSL函數庫的f:type()函數來動態確定變量/值的類型

以下是在FXSL爲f:type()

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:f="http://fxsl.sf.net/" 
exclude-result-prefixes="f xs" 
> 
    <xsl:import href="../f/func-type.xsl"/> 

    <!-- To be applied on ../data/numList.xml --> 

    <xsl:output omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
    f:apply(f:typeConstructor(11),'03'): <xsl:value-of select="f:apply(f:typeConstructor(11),'03')"/> 
    f:apply(f:typeConstructor('xxx'),'03'): <xsl:value-of select="f:apply(f:typeConstructor('xxx'),'03')"/> 
    f:apply(f:typeConstructor(11),'03') gt 4: <xsl:value-of select="f:apply(f:typeConstructor(11),'03') gt 4"/> 
    f:type(f:apply(f:typeConstructor(11),'03')): <xsl:value-of select="f:type(f:apply(f:typeConstructor(11),'03'))"/> 
    f:type(f:apply(f:typeConstructor('string'), 3)): <xsl:value-of select="f:type(f:apply(f:typeConstructor('string'),'03'))"/> 
<!-- Supported only by a SA Processor --> 
    xs:token('abc') : <xsl:value-of select="f:type(xs:token('abc'))" 
     use-when="system-property('xsl:is-schema-aware')='yes'"/> 

    -1 : <xsl:value-of select="f:type(-1)"/> 
<!-- Supported only by a SA Processor --> 
    xs:negativeInteger(-1) : <xsl:value-of select="f:type(xs:negativeInteger(-1))" 
     use-when="system-property('xsl:is-schema-aware')='yes'" /> 
    xs:nonPositiveInteger(0) : <xsl:value-of select="f:type(xs:nonPositiveInteger(0))" 
     use-when="system-property('xsl:is-schema-aware')='yes'" /> 

    0 : <xsl:value-of select="f:type(0)"/> 
    3 : <xsl:value-of select="f:type(3)"/> 
    3. : <xsl:value-of select="f:type(3.)"/> 
    3.0E1 : <xsl:value-of select="f:type(3.0E1)"/> 
    xs:float(3) : <xsl:value-of select="f:type(xs:float(3))"/> 
<!-- Supported only by a SA Processor --> 
    xs:positiveInteger(3) : <xsl:value-of select="f:type(xs:positiveInteger(3))" 
     use-when="system-property('xsl:is-schema-aware')='yes'" /> 

    '3' : <xsl:value-of select="f:type('3')"/> 
    (/*/*/text())[1] : <xsl:value-of select="f:type((/*/*/text())[1])"/> 
    data((/*/*/text())[1]) : <xsl:value-of select="f:type(data((/*/*/text())[1]))"/> 
    </xsl:template> 
</xsl:stylesheet> 

測試轉化當該XML文檔上施加這種轉變:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

有用,corect產生結果:

f:apply(f:typeConstructor(11),'03'): 3 
    f:apply(f:typeConstructor('xxx'),'03'): 03 
    f:apply(f:typeConstructor(11),'03') gt 4: false 
    f:type(f:apply(f:typeConstructor(11),'03')): xs:integer 
    f:type(f:apply(f:typeConstructor('string'), 3)): xs:string 

    xs:token('abc') : xs:string 

    -1 : xs:integer 

    xs:negativeInteger(-1) : xs:integer 
    xs:nonPositiveInteger(0) : xs:integer 

    0 : xs:integer 
    3 : xs:integer 
    3. : xs:decimal 
    3.0E1 : xs:double 
    xs:float(3) : xs:float 

    xs:positiveInteger(3) : xs:integer 

    '3' : xs:string 
    (/*/*/text())[1] : xml:node 
    data((/*/*/text())[1]) : xs:string 

說明

f:type(),如可以從its source可以看出使用內部中的XPath 2.0操作者instance of和從以多個特定類型直到它確定特定類型的一個最常見的類型測試的值。

0

使用像Saxon 9的企業版本或類似XmlPrime或AltovaXML的模式感知XSLT 2.0處理器,可以使用W3C XML模式在使用XSLT處理輸入文檔時驗證輸入文檔。

0

使用cast as運算符,例如,

'5' cast as xs:integer返回5

'foo' cast as xs:integer拋出Cannot convert string "d" to an integer使用撒克遜。

如果你想拋出自己的錯誤,你可以使用castable as,例如

if (not('foo' castable as xs:integer)) then 
    error((), 'bad') 
相關問題