2009-09-03 6 views
31

Otrzymuję "Niedozwolone znaki w błędzie ścieżki" podczas korzystania z metody XMLTextReader. Zasadniczo wysyłam długi adres URL do pliku tr.im, a tr.im wysyła odpowiedź jako strumień XML, który próbuję przeanalizować, ale pojawia się wyżej wspomniany błąd. Czy możecie mi wyjaśnić, dlaczego dostaję ten błąd i dokąd idę źle? Oto kod:Niedozwolone znaki w błędzie ścieżki podczas analizowania XML w języku C#

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 

Używam programu Visual Studio 2008 Express Edition

Odpowiedz

66

Powodem jest używasz konstruktora XmlTextReader która pobiera ścieżkę pliku jako parametr, ale jesteś przechodzącą XML treść zamiast.

Spróbuj następujący kod

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

niesamowite. Dzięki, Twoja sugestia nie spowodowała błędu. – Sathya

+1

Nie działa, chyba że zmienisz żądanie otrzymania xml zamiast domyślnego ustawienia HTML. Dodaj ten parametr do swojego żądania: format = xml – Lee

1

należy wydrukować lub w inny sposób wyświetlania strUrl. Kiedy rzeczywiście zobaczysz ścieżkę, którą przechodzisz do czytnika testowego, powinno być oczywiste, co to jest błąd ścieżki.

Ponadto, patrząc na kod, wydaje się, że sama odpowiedź może być XML, w takim przypadku należy przekazać objSReader bezpośrednio do konstruktora XmlTextReader.

+0

Odpowiedź to dane XML, jak wspomniano w pytaniu. Nawet przy przejściu objorpera otrzymałem błąd. – Sathya

4

Konstruktor XmlTextReader(string) oczekuje ścieżki pliku, a nie rzeczywistych danych XML.

Możesz utworzyć czytnik XML bezpośrednio ze strumienia. Zalecanym sposobem na to jest za pomocą metody XmlReader.Create:

XmlReader reader = XmlReader.Create(objStream); 
+0

Błąd pobierania: "System.Xml.XmlReader.Create (string)" jest "metodą", ale jest używany jako "typ" z tym. – Sathya

+1

Edytowane w celu usunięcia "nowego", co było problemem. –

+0

Yup - działa również. – Sathya

12

XmlTextReader konstruktor przyjmuje ciąg znaków, który wskazuje na adres URL w którym przechowywany jest plik XML. Przekazujesz mu sam XML, który oczywiście jest nieprawidłową ścieżką. Spróbuj to zamiast:

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)) 
    { 

    } 
} 
1
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()); 
      } 
     } 
    } 
+0

co mam z tym zrobić? – Sathya

Powiązane problemy