Altova StyleVision 2023 Enterprise Edition

Cuando se usa una función de extensión .NET dentro de una expresión XPath/XQuery, los tipos de datos de los argumentos de la función son importantes para determinar a cuál de los métodos .NET que tienen el mismo nombre se está llamando.

 

En .NET se siguen estas normas:

 

Si en una clase hay varios métodos que tienen el mismo nombre, solamente se pueden seleccionar los métodos que tienen el mismo número de argumentos que la llamada a función.

Los tipos de datos de cadena, numéricos y booleanos XPath/XQuery (ver lista más abajo) se convierten de forma implícita en el tipo de datos .NET correspondiente. Si el tipo XPath/XQuery suministrado se puede convertir en más de un tipo .NET (p. ej. xs:integer), entonces se selecciona el tipo .NET que se declaró para el método seleccionado. Por ejemplo, si el método .NET al que se está llamando es fx(double) y el tipo de datos XPath/XQuery suministrado es xs:integer, entonces se convierte xs:integer en el tipo de datos .NET double.

 

La tabla que aparece a continuación enumera las conversiones implícitas de los tipos de cadena, numéricos y booleanos XPath/XQuery en tipos de datos .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

 

Los subtipos de los tipos de datos XML Schema de la tabla anterior (que se usan en XPath y XQuery) también se convierten en los tipos .NET correspondientes al tipo antecesor del subtipo.

 

En algunos casos quizás no sea posible seleccionar el método .NET correcto usando la información dada. Por ejemplo, imagine que:

 

El argumento presentado es un valor xs:untypedAtomic de 10 y está destinado al método mimétodo(float).

Sin embargo, hay otro método en la clase que toma un argumento de otro tipo de datos: mimétodo(double).

Puesto que los métodos tienen el mismo nombre y el tipo suministrado (xs:untypedAtomic) se puede convertir correctamente tanto en float como en double, es posible que xs:untypedAtomic se convierta en double en lugar de en float.

Por consiguiente, el método seleccionado no será el método necesario y puede que no produzca el resultado esperado. Una solución es crear un método definido por el usuario con un nombre diferente y usar ese método.

 

Los tipos que no aparecen en la lista anterior (p. ej. xs:date) no se convertirán y generarán un error.

 

© 2017-2023 Altova GmbH