2009-09-03 18 views
31

Durante l'utilizzo del metodo XMLTextReader viene visualizzato "Caratteri non validi nell'errore di percorso". Fondamentalmente, sto inviando un lungo URL a tr.im e tr.im invia la risposta come flusso XML, che sto cercando di analizzare ma ottengo l'errore sopra citato. Potete ragazzi guidarmi sul motivo per cui sto ricevendo questo errore e dove sto andando male? Ecco il codice:Caratteri non validi nell'errore di percorso durante l'analisi di XML in 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 

sto usando Visual Studio 2008, Express Edition

risposta

66

Il motivo è che si sta utilizzando il costruttore di XmlTextReader che prende un percorso di file come parametro, ma si sta passando XML contenuto invece.

provare il seguente codice

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

stupefacente. Grazie, il tuo suggerimento non ha causato l'errore. – Sathya

+1

Non funzionerà a meno che non si cambi la richiesta per ricevere xml invece delle impostazioni HTML predefinite. Aggiungi questo parametro alla tua richiesta: format = xml – Lee

1

Si consiglia di stampare o meno visualizzare strUrl. Una volta che puoi effettivamente vedere il percorso che stai passando al lettore di test, dovrebbe essere ovvio qual è l'errore del percorso.

Inoltre, osservando il codice, sembra che la risposta stessa possa essere XML, nel qual caso è necessario passare objSReader direttamente al costruttore XmlTextReader.

+0

La risposta è dati XML, come menzionato nella domanda. Anche con il passaggio di objSReader stavo ottenendo l'errore. – Sathya

4

Il costruttore XmlTextReader(string) prevede un percorso file, non i dati XML effettivi.

È possibile creare un lettore XML direttamente dallo stream. Il metodo consigliato per farlo è usare il metodo XmlReader.Create:

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

Errore: 'System.Xml.XmlReader.Create (string)' è un 'metodo' ma è usato come un 'tipo' con questo. – Sathya

+1

Modificato per eliminare "nuovo", che era il problema. –

+0

Yup- funziona pure. – Sathya

12

costruttore XmlTextReader accetta una stringa che punta all'URL in cui è memorizzato un file XML. Stai trasmettendo l'XML stesso che ovviamente è un percorso non valido. Prova a modificare:

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

cosa dovrei fare con questo? – Sathya

Problemi correlati