Подтвердить что ты не робот

Недопустимые символы в ошибке пути при анализе XML в С#

Я получаю "Недопустимые символы в ошибке пути" при использовании метода XMLTextReader. В принципе, я отправляю длинный URL-адрес в tr.im, а tr.im отправляет ответ как поток XML, который я пытаюсь разобрать, но получаю вышеупомянутую ошибку. Можете ли вы, ребята, объяснить мне, почему я получаю эту ошибку и где я ошибаюсь? Здесь код:

WebRequest wrURL;
Stream objStream;
string strURL;
wrURL = WebRequest.Create("http://api.tr.im/api/trim_url.xml?url=" + HttpUtility.UrlEncode(txtURL.Text));
objStream = wrURL.GetResponse().GetResponseStream();
StreamReader objSReader = new StreamReader(objStream);
strURL = objSReader.ReadToEnd().ToString();
XmlTextReader reader = new XmlTextReader(strURL); //getting the error at this point

Я использую Visual Studio 2008, Express Edition

4b9b3361

Ответ 1

Причина, почему вы используете конструктор XmlTextReader, который принимает путь к файлу в качестве параметра, но вместо этого вы передаете XML-контент.

Попробуйте использовать следующий код

XmlTextReader reader = new XmlTextReader(new StringReader(strURL));

Ответ 2

Конструктор XmlTextReader принимает строку, указывающую на URL-адрес, где хранится XML файл. Вы передаете ему сам XML, который, конечно, является недопустимым путем. Вместо этого попробуйте:

using (var client = new WebClient())
{
    var xml = client.DownloadString("http://api.tr.im/api/trim_url.xml?url=" + HttpUtility.UrlEncode(txtURL.Text));
    using (var strReader = new StringReader(xml))
    using (var reader = XmlReader.Create(strReader))
    {

    }
}

Ответ 3

Конструктор XmlTextReader(string) ожидает путь к файлу, а не фактические данные XML.

Вы можете создать читатель XML непосредственно из потока. Рекомендуемый способ сделать это: метод XmlReader.Create:

XmlReader reader = XmlReader.Create(objStream);

Ответ 4

Вы должны распечатать или иначе отобразить strUrl. После того, как вы действительно увидите путь, который вы передаете тестовому считывателю, должно быть очевидно, что такое ошибка пути.

Кроме того, просто глядя на код, кажется, что сам ответ может быть XML, и в этом случае вы должны передать objSReader непосредственно в конструктор XmlTextReader.

Ответ 5

private void csv2_Load(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();
        DataSet dsSchema = new DataSet();
        dsSchema.ReadXml(@"C:\Working\Teradata\ssis\Sample.xml");
        StringReader sreader = new StringReader(ToXml(dsSchema));
         ds.ReadXmlSchema(sreader);
         ds.ReadXml(@"C:\Working\Teradata\ssis\Sample.xml");
        ExportTableToCsvString(ds.Tables["session"], true, @"C:\Working\Teradata\ssis\op\session.csv");
        BuildDynamicTable(ds, @"C:\Working\Teradata\ssis\op\");

    }
    public string ToXml(DataSet ds)
    {
        using (var memoryStream = new MemoryStream())
        {
            using
                   (
                   TextWriter streamWriter = new StreamWriter(memoryStream))
            {
                var xmlSerializer = new XmlSerializer(typeof(DataSet));
                xmlSerializer.Serialize(streamWriter, ds);
                return Encoding.UTF8.GetString(memoryStream.ToArray());
            }
        }
    }