Altova XMLSpy 2024 Enterprise Edition

当在XPath/XQuery表达式中调用.NET扩展函数时,函数参数的数据类型是很重要的,用来确定调用同名的多个.NET方法中的哪一个。

 

在.NET中,需遵循以下规则:

 

如果在一个类中有多个同名的方法,则将选择那些有与函数调用相同的参数数量的方法。

XPath/XQuery的字符串、数字和布尔值数据类型(参见下方列表)会被隐式地转换为相应的.NET数据类型。如果所提供的XPath/XQuery类型可以被转换为不只一个.NET类型(例如,xs:integer),则将选择被调用的方法中声明的.NET类型。例如,如果被调用的.NET方法是fx(double),并且提供的XPath/XQuery数据类型是xs:integer,则xs:integer将被转换为.NET的double数据类型。

 

 

下表列出了从XPath/XQuery的字符串、数字和布尔值类型到.NET数据类型的隐式转换。

 

xs:string

StringValue, string

xs:boolean

BooleanValue, bool

xs:integer

IntegerValue, decimal, long, integer, short, byte, double, float

xs:float

FloatValue, float, double

xs:double

DoubleValue, double

xs:decimal

DecimalValue, decimal, double, float

 

 

上方列出的XML Schema数据类型的子类型(同时在XPath和XQuery中使用)也将被转换为与子类型的祖先类型对应的.NET类型。

 

在某些情况下,可能无法根据提供的信息选择正确的.NET方法。以下面这种情况为例。

 

提供的参数是一个xs:untypedAtomic,值为10,打算将其用于mymethod(float)方法。

然而,在该类中还有一个方法,采用另一个数据类型的参数:mymethod(double)

由于这两个方法的名称是相同的,并且提供的类型(xs:untypedAtomic)可以被正确地转换为floatdouble,所以xs:untypedAtomic很有可能被转换为double,而不是float

因此,选中的方法并不是所需的方法,可能无法生成预期的结果。要解决这一问题,您可以使用另一个名称创建一个用户定义的方法并使用该方法。

 

上表中没有包含的类型(例如xs:date)将不会被转换,从而产生一个错误。

 

© 2017-2023 Altova GmbH