コード例 #1
0
ファイル: AxisNodeIterator.cs プロジェクト: semyonc/xpath2
 protected void AssignFrom(AxisNodeIterator src)
 {
     context   = src.context;
     typeTest  = src.typeTest;
     nameTest  = src.nameTest;
     matchSelf = src.matchSelf;
     iter      = src.iter.Clone();
 }
コード例 #2
0
 public SequenceType(XmlTypeCode typeCode, XmlQualifiedNameTest nameTest, XmlSchemaType schemaType, bool isNillable = false)
 {
     TypeCode    = typeCode;
     Cardinality = XmlTypeCardinality.One;
     NameTest    = nameTest;
     SchemaType  = schemaType;
     Nillable    = isNillable;
     IsNode      = TypeCodeIsNodeType(TypeCode);
     ItemType    = TypeCodeToItemType(TypeCode, SchemaType);
 }
コード例 #3
0
 public NodeTest(object test)
 {
     if (test is XmlQualifiedNameTest qualifiedNameTest)
     {
         NameTest = qualifiedNameTest;
     }
     else if (test is SequenceType type && !Equals(type, SequenceType.Node))
     {
         TypeTest = type;
     }
 }
コード例 #4
0
 public NodeTest(object test)
 {
     if (test is XmlQualifiedNameTest)
     {
         nameTest = (XmlQualifiedNameTest)test;
     }
     else if (test is SequenceType && test != SequenceType.Node)
     {
         typeTest = (SequenceType)test;
     }
 }
コード例 #5
0
 public SequenceType(XmlTypeCode typeCode, XmlQualifiedNameTest nameTest)
 {
     TypeCode    = typeCode;
     Cardinality = XmlTypeCardinality.One;
     NameTest    = nameTest;
     IsNode      = TypeCodeIsNodeType(TypeCode);
     if (TypeCode != XmlTypeCode.Item && !IsNode)
     {
         SchemaType = XmlSchemaType.GetBuiltInSimpleType(TypeCode);
     }
     ItemType = TypeCodeToItemType(TypeCode, SchemaType);
 }
コード例 #6
0
ファイル: AxisNodeIterator.cs プロジェクト: semyonc/xpath2
 public AxisNodeIterator(XPath2Context context, object nodeTest, bool matchSelf, XPath2NodeIterator iter)
 {
     this.context = context;
     if (nodeTest is XmlQualifiedNameTest)
     {
         nameTest = (XmlQualifiedNameTest)nodeTest;
     }
     else if (nodeTest is SequenceType && nodeTest != SequenceType.Node)
     {
         typeTest = (SequenceType)nodeTest;
     }
     this.matchSelf = matchSelf;
     this.iter      = iter;
 }
コード例 #7
0
        private bool TestItem(XPathNavigator nav, NodeTest nodeTest)
        {
            XmlQualifiedNameTest nameTest = nodeTest.nameTest;
            SequenceType         typeTest = nodeTest.typeTest;

            if (nameTest != null)
            {
                return((nav.NodeType == XPathNodeType.Element || nav.NodeType == XPathNodeType.Attribute) &&
                       (nameTest.IsNamespaceWildcard || nameTest.Namespace == nav.NamespaceURI) &&
                       (nameTest.IsNameWildcard || nameTest.Name == nav.LocalName));
            }
            else if (typeTest != null)
            {
                return(typeTest.Match(nav, context));
            }
            return(true);
        }
コード例 #8
0
        /// <summary>
        /// Create an XmlQueryType that represents the type of "item".
        /// </summary>
        private XmlQueryType CreateXmlType(XPathItem item)
        {
            if (item.IsNode)
            {
                // Rtf
                RtfNavigator rtf = item as RtfNavigator;
                if (rtf != null)
                {
                    return(XmlQueryTypeFactory.Node);
                }

                // Node
                XPathNavigator nav = (XPathNavigator)item;
                switch (nav.NodeType)
                {
                case XPathNodeType.Root:
                case XPathNodeType.Element:
                    if (nav.XmlType == null)
                    {
                        return(XmlQueryTypeFactory.Type(nav.NodeType, XmlQualifiedNameTest.New(nav.LocalName, nav.NamespaceURI), XmlSchemaComplexType.UntypedAnyType, false));
                    }

                    return(XmlQueryTypeFactory.Type(nav.NodeType, XmlQualifiedNameTest.New(nav.LocalName, nav.NamespaceURI), nav.XmlType, nav.SchemaInfo.SchemaElement.IsNillable));

                case XPathNodeType.Attribute:
                    if (nav.XmlType == null)
                    {
                        return(XmlQueryTypeFactory.Type(nav.NodeType, XmlQualifiedNameTest.New(nav.LocalName, nav.NamespaceURI), DatatypeImplementation.UntypedAtomicType, false));
                    }

                    return(XmlQueryTypeFactory.Type(nav.NodeType, XmlQualifiedNameTest.New(nav.LocalName, nav.NamespaceURI), nav.XmlType, false));
                }

                return(XmlQueryTypeFactory.Type(nav.NodeType, XmlQualifiedNameTest.Wildcard, XmlSchemaComplexType.AnyType, false));
            }

            // Atomic value
            return(XmlQueryTypeFactory.Type((XmlSchemaSimpleType)item.XmlType, true));
        }
コード例 #9
0
 public SequenceType(XmlTypeCode typeCode, XmlQualifiedNameTest nameTest, XmlSchemaType schemaType)
     : this(typeCode, nameTest, schemaType, false)
 {
 }
コード例 #10
0
 public bool TestNode(XmlQualifiedNameTest nameTest, XQuerySequenceType typeTest)
 {
     if (nameTest != null)
     {
         return (NodeType == XPathNodeType.Element || NodeType == XPathNodeType.Attribute) &&
             (nameTest.IsNamespaceWildcard || nameTest.Namespace == NamespaceURI) &&
             (nameTest.IsNameWildcard || nameTest.Name == LocalName);
     }
     else if (typeTest != null)
         return typeTest.Match(this);
     return true;
 }