How do grab the main loop, with conditions, and output via shortcodes

Are you sure you want to do this in this manner? Normally a section like this might be written to the page template somehow and not called via the content editor. That being said, this should do what you need:

add_shortcode( 'show_xyz_news', 'xyz_news_query' );

function xyz_news_query() {
    $args = array(
        'posts_per_page' => 3,
        'category_name' => 'news',
    );
    $news_query = new WP_Query( $args );
    if ( $news_query->have_posts() ) :
        $html_out="<ul>";
        while ( $news_query->have_posts() ) :
            $news_query->the_post();
            // Do stuff with each post here
            $html_out .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
        endwhile;
        $html_out .= '</ul>';
    else : // No results
        echo "Nothing to show";
    endif;
    wp_reset_query();
    return $html_out;
}

Then in the editor for the page call the shortcode [show_xyz_news].