XMLTEXTREADER仅在控制台应用程序中工作



我在控制台应用程序中有一个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");而不是无效。

我可能已经重现了问题。在例如,您可以使用Visual Studia的默认控制台应用模板创建的Common Console应用程序中,引用了System.xml组件。但是在UWP中,它在默认模板和汇编系统中未引用。xml不能像在控制台应用程序中那样从UWP引用。

要解决问题,您应该遵循以下步骤:添加Nuget软件包,以使用XML像System.XML.ReaderWriter一样到UWP应用程序。

与XMLReader一起工作有些不同,因为您无法像在Console应用程序中那样简单访问URI。您应该创建httpclient,获取流并将其传递给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
            }
        }
    }
}

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

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

我认为问题在于Xmlresolver XMlReader在封面下使用的问题。默认的Urlresolver没有任何用户凭据,因此您只能与不需要凭据的位置联系。我希望在从控制台转换为通用时,外部资源的安全要求变得更加强大。您可能需要在XMLReaderSettings中引用XMLSecureresolver(或类似)。在此处查看备注部分:https://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings(V=VS.110).aspx

通用应用程序应很好地支持XMLReader。确认您在项目中引用的system.xml组件。

确保您的项目构建您的项目,其中XMLReader所需的库可能必须在新应用中添加库,尽管对于通用应用程序不需要。

<</p>

相关内容

最新更新