System.Xml.Xsl.XPath.XPathQilFactory.ConvertToBoolean C# (CSharp) Method

ConvertToBoolean() public method

public ConvertToBoolean ( QilNode n ) : QilNode
n QilNode
return QilNode
        public QilNode ConvertToBoolean(QilNode n)
        {
            switch (n.XmlType.TypeCode)
            {
                case XmlTypeCode.Boolean:
                    return n;
                case XmlTypeCode.Double:
                    // (x < 0 || 0 < x)  ==  (x != 0) && !Double.IsNaN(x)
                    QilIterator i;
                    return (n.NodeType == QilNodeType.LiteralDouble
                        ? Boolean((double)(QilLiteral)n < 0 || 0 < (double)(QilLiteral)n)
                        : Loop(i = Let(n), Or(Lt(i, Double(0)), Lt(Double(0), i)))
                    );
                case XmlTypeCode.String:
                    return (n.NodeType == QilNodeType.LiteralString
                        ? Boolean(((string)(QilLiteral)n).Length != 0)
                        : Ne(StrLength(n), Int32(0))
                    );
                default:
                    if (n.XmlType.IsNode)
                    {
                        return Not(IsEmpty(n));
                    }

                    ExpectAny(n);
                    return XsltConvert(n, T.BooleanX);
            }
        }

Usage Example

Exemplo n.º 1
0
 //also used by XPathPatternBuilder
 public static QilNode PredicateToBoolean(QilNode predicate, XPathQilFactory f, IXPathEnvironment env)
 {
     // Prepocess predicate: if (predicate is number) then predicate := (position() == predicate)
     if (!f.IsAnyType(predicate))
     {
         if (predicate.XmlType.TypeCode == XmlTypeCode.Double)
         {
             predicate = f.Eq(env.GetPosition(), predicate);
         }
         else
         {
             predicate = f.ConvertToBoolean(predicate);
         }
     }
     else
     {
         QilIterator i;
         predicate = f.Loop(i = f.Let(predicate),
                            f.Conditional(f.IsType(i, T.Double),
                                          f.Eq(env.GetPosition(), f.TypeAssert(i, T.DoubleX)),
                                          f.ConvertToBoolean(i)
                                          )
                            );
     }
     return(predicate);
 }
All Usage Examples Of System.Xml.Xsl.XPath.XPathQilFactory::ConvertToBoolean