Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ChangeTypeXsltResult() [2/2]

object System.Xml.Xsl.Runtime.XmlQueryRuntime.ChangeTypeXsltResult ( XmlQueryType xmlType,
object value )
inlinepackage

Definition at line 377 of file XmlQueryRuntime.cs.

378 {
379 if (value == null)
380 {
381 throw new XslTransformException(System.SR.Xslt_ItemNull, string.Empty);
382 }
383 switch (xmlType.TypeCode)
384 {
385 case XmlTypeCode.String:
386 if (value.GetType() == XsltConvert.DateTimeType)
387 {
388 value = XsltConvert.ToString((DateTime)value);
389 }
390 break;
391 case XmlTypeCode.Double:
392 if (value.GetType() != XsltConvert.DoubleType)
393 {
394 value = ((IConvertible)value).ToDouble(null);
395 }
396 break;
397 case XmlTypeCode.Node:
398 if (xmlType.IsSingleton)
399 {
400 break;
401 }
402 if (value is XPathArrayIterator xPathArrayIterator && xPathArrayIterator.AsList is XmlQueryNodeSequence)
403 {
404 value = xPathArrayIterator.AsList as XmlQueryNodeSequence;
405 }
406 else
407 {
408 XmlQueryNodeSequence xmlQueryNodeSequence = new XmlQueryNodeSequence();
409 if (value is IList list)
410 {
411 for (int i = 0; i < list.Count; i++)
412 {
414 }
415 }
416 else
417 {
418 foreach (object item in (IEnumerable)value)
419 {
421 }
422 }
424 }
425 value = ((XmlQueryNodeSequence)value).DocOrderDistinct(_docOrderCmp);
426 break;
427 case XmlTypeCode.Item:
428 {
429 Type type = value.GetType();
430 switch (XsltConvert.InferXsltType(type).TypeCode)
431 {
432 case XmlTypeCode.Boolean:
433 value = new XmlQueryItemSequence(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Boolean), value));
434 break;
435 case XmlTypeCode.Double:
436 value = new XmlQueryItemSequence(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.Double), ((IConvertible)value).ToDouble(null)));
437 break;
438 case XmlTypeCode.String:
439 value = ((!(type == XsltConvert.DateTimeType)) ? new XmlQueryItemSequence(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String), value)) : new XmlQueryItemSequence(new XmlAtomicValue(XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String), XsltConvert.ToString((DateTime)value))));
440 break;
441 case XmlTypeCode.Node:
442 value = ChangeTypeXsltResult(XmlQueryTypeFactory.NodeS, value);
443 break;
444 case XmlTypeCode.Item:
446 {
447 value = ChangeTypeXsltResult(XmlQueryTypeFactory.NodeS, value);
448 break;
449 }
451 {
452 throw new XslTransformException(System.SR.Xslt_UnsupportedClrType, type.Name);
453 }
454 value = ((!(value is XPathNavigator)) ? new XmlQueryNodeSequence(iXPathNavigable.CreateNavigator()) : new XmlQueryNodeSequence((XPathNavigator)value));
455 break;
456 }
457 break;
458 }
459 }
460 return value;
461 }
void Add(TKey key, TValue value)
static string Xslt_UnsupportedClrType
Definition SR.cs:1992
static string Xslt_ItemNull
Definition SR.cs:1988
Definition SR.cs:7
static ? XmlSchemaSimpleType GetBuiltInSimpleType(XmlQualifiedName qualifiedName)
readonly DocumentOrderComparer _docOrderCmp
object ChangeTypeXsltResult(int indexType, object value)
static XPathNavigator EnsureNavigator(object value)

References System.Xml.Xsl.Runtime.XmlQueryRuntime._docOrderCmp, System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Xml.Xsl.Runtime.XmlQueryRuntime.ChangeTypeXsltResult(), System.Xml.Xsl.Runtime.XsltConvert.DateTimeType, System.Xml.Dictionary, System.Xml.Xsl.Runtime.XsltConvert.DoubleType, System.Xml.Xsl.Runtime.XmlQueryRuntime.EnsureNavigator(), System.Xml.Schema.XmlSchemaType.GetBuiltInSimpleType(), System.Type.GetType(), System.Xml.Xsl.Runtime.XsltConvert.InferXsltType(), System.Xml.Xsl.XmlQueryType.IsSingleton, System.item, System.list, System.Xml.Xsl.XmlQueryTypeFactory.NodeS, System.Xml.Xsl.Runtime.XsltConvert.ToString(), System.type, System.Xml.Xsl.XmlQueryType.TypeCode, System.value, System.SR.Xslt_ItemNull, and System.SR.Xslt_UnsupportedClrType.