System.Xml.Xsl.Xslt.XsltLoader.XslChoose C# (CSharp) Method

XslChoose() private method

private XslChoose ( ) : XslNode
return XslNode
        private XslNode XslChoose()
        {
            ContextInfo ctxInfo = _input.GetAttributes();

            List<XslNode> content = new List<XslNode>();
            bool otherwise = false;
            bool when = false;

            QName parentName = _input.ElementName;
            if (_input.MoveToFirstChild())
            {
                do
                {
                    switch (_input.NodeType)
                    {
                        case XmlNodeType.Element:
                            XslNode node = null;
                            if (Ref.Equal(_input.NamespaceUri, _atoms.UriXsl))
                            {
                                if (Ref.Equal(_input.LocalName, _atoms.When))
                                {
                                    if (otherwise)
                                    {
                                        ReportError(/*[XT_018]*/SR.Xslt_WhenAfterOtherwise);
                                        _input.SkipNode();
                                        continue;
                                    }
                                    else
                                    {
                                        when = true;
                                        node = XslIf();
                                    }
                                }
                                else if (Ref.Equal(_input.LocalName, _atoms.Otherwise))
                                {
                                    if (otherwise)
                                    {
                                        ReportError(/*[XT_019]*/SR.Xslt_DupOtherwise);
                                        _input.SkipNode();
                                        continue;
                                    }
                                    else
                                    {
                                        otherwise = true;
                                        node = XslOtherwise();
                                    }
                                }
                            }
                            if (node == null)
                            {
                                ReportError(/*[XT_020]*/SR.Xslt_UnexpectedElement, _input.QualifiedName, parentName);
                                _input.SkipNode();
                                continue;
                            }
                            AddInstruction(content, node);
                            break;
                        case XmlNodeType.Whitespace:
                        case XmlNodeType.SignificantWhitespace:
                            break;
                        default:
                            Debug.Assert(_input.NodeType == XmlNodeType.Text);
                            ReportError(/*[XT_020]*/SR.Xslt_TextNodesNotAllowed, parentName);
                            break;
                    }
                } while (_input.MoveToNextSibling());
            }
            CheckError(!when, /*[XT_021]*/SR.Xslt_NoWhen);
            return SetInfo(f.Choose(), content, ctxInfo);
        }