XmlTextReader仅适用于控制台应用程序?

时间:2016-06-17 17:10:57

标签: c# xml-parsing

我在控制台应用程序中有一个rss-reader,它可以正常工作:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlTextReader reader = new  XmlTextReader("http://www.di.se/rss");
            string myXmlString = "";
            // Skip non-significant whitespace  
            reader.WhitespaceHandling = WhitespaceHandling.Significant;

            // Read nodes one at a time  
            while (reader.Read())
            {
                // Print out info on node  
                //Console.WriteLine(reader.ReadInnerXml().ToString());
                myXmlString += myXmlString + reader.ReadInnerXml().ToString();

            }

            //Create the XmlDocument.
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<root>" + myXmlString + "</root>");

            //Display all the book titles.
            XmlNodeList elemList = doc.GetElementsByTagName("title");
            for (int i = 0; i < elemList.Count; i++)
            {
                Console.WriteLine(elemList[i].InnerXml);
            }

            Console.ReadLine();
        }


    }
}

但是,当我尝试将其移至我的Windows Universal应用程序时,它表示XmlTextReader命名空间不存在。这只适用于控制台应用吗?我怎么能尝试将其翻译成我的通用应用程序?我确实在我的通用应用程序中声明了与我的控制台项目中相同的命名空间(然后是一些。)所以我要做的是让它在我的mainpage.xaml.cs文件中运行。

我尝试使用XmlReader reader = new XmlReader("http://www.di.se/rss");代替,但无济于事。

5 个答案:

答案 0 :(得分:2)

Create()上调用XmlReader以获取可用的流,如下例所示:

        using (var reader = XmlReader.Create(path))
        {
            this.XmlDocument.Load(reader);
        }

答案 1 :(得分:2)

我可能已经复制了这个问题。让我们说一下使用Visual Studia的默认控制台应用程序模板创建的通用控制台应用程序,引用System.Xml程序集。但是在UWP中,它没有在默认模板中引用,并且无法像在控制台应用程序中那样简单地从UWP引用程序集System.Xml。

要解决此问题,您应该按照以下步骤操作: 添加NuGet包以使用像System.Xml.ReaderWriter这样的XML到您的UWP应用程序。

使用XmlReader有点不同,因为您无法像在Console Application中那样简单地访问URI。您应该创建HttpClient,获取Stream并将其传递给XmlReader。 在这里,我为Main.xaml.cs提供了一个示例代码隐藏,它带有默认的UWP应用程序模板:

using System.Net.Http;
using System.Xml;
using Windows.UI.Xaml.Controls;

namespace App1
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            var client = new HttpClient();
            var stream = client.GetStreamAsync("http://www.di.se/rss").Result;

            XmlReader reader = XmlReader.Create(stream);
            string myXmlString = "";
            while (reader.Read())
            {
                myXmlString += myXmlString + reader.ReadInnerXml().ToString();
            }

            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<root>" + myXmlString + "</root>");

            //Display all the book titles.
            XmlNodeList elemList = doc.GetElementsByTagName("title");
            for (int i = 0; i < elemList.Count; i++)
            {
                var xml = elemList[i].InnerXml;
                // Do your work with xml
            }
        }
    }
}

答案 2 :(得分:1)

我认为问题出在XmlUrlResolver上,XmlReader使用了XmlUrlResolver。默认的UrlResolver没有任何用户凭据,因此您只能访问不需要凭据的位置。我希望在从控制台切换到通用时,外部资源的安全要求变得更加强大。您可能需要在XmlReaderSettings中引用XmlSecureResolver(或类似的)。请查看此处的备注部分:https://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings(v=vs.110).aspx

答案 3 :(得分:0)

通用应用程序应该支持XmlReader。确认您在项目中引用了System.Xml程序集。

答案 4 :(得分:0)

确保使用XMLReader所需的库构建项目,可能必须在新应用程序中添加库,但通用应用程序不需要这样。