2009-09-03 24 views
31

XMLTextReader yöntemi kullanırken "Yol hatalarında yanıltıcı karakterler" alıyorum. Temel olarak, tr.im'e uzun bir URL gönderiyorum ve tr.im bu cevabı ayrıştırmaya çalıştığım XML akışı olarak gönderir ancak yukarıda belirtilen hatayı alıyorum. Bana bu hatayı alıp neye yanlış gittiğimi anlatan bir rehber misiniz? İşte kod:XML hata ayıklama sırasında yol hatası geçersiz karakterler 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 

Visual Studio 2008 kullanıyorum, Express Edition

cevap

66

neden parametre olarak bir dosya yolunu alır XmlTextReader yapıcısı kullandığınız olmasının sebebi ancak XML geçiyoruz bunun yerine içerik.

yazdırabilir veya başka şekilde strUrl göstermesi gerekir aşağıdaki kodu

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

Şaşırtıcı. Teşekkürler, öneriniz hatayla sonuçlanmadı. – Sathya

+1

Varsayılan güzel HTML ayarı yerine xml alma isteğini değiştirmedikçe çalışmaz. Bu parametreyi isteğinize ekleyin: format = xml – Lee

1

deneyin. Test okuyucusuna geçtiğiniz yolu gerçekten gördüğünüzde, yol hatasının ne olduğu açık olmalıdır.

Ayrıca, yalnızca koda bakarak, yanıtın kendisi XML olabilir, bu durumda objSReader'u doğrudan XmlTextReader yapıcısına iletmelisiniz.

+0

Yanıt, Soruda belirtildiği gibi XML verisidir. Sadece objSReader'ı geçerken bile hatayı alıyordum. – Sathya

4

XmlTextReader(string) yapıcısı, gerçek XML verisi yerine bir dosya yolu bekler.

Doğrudan bir akış üzerinden bir XML okuyucu oluşturabilirsiniz. Bunu yapmak için önerilen yol XmlReader.Create yöntemi kullanıyor:

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

hatası alındı: 'System.Xml.XmlReader.Create (string)' bir 'method'tur ancak bununla bir' type 'gibi kullanılır. – Sathya

+1

"Yeni" yi çıkarmak için düzenlenmiş, sorun buydu. –

+0

Yup-ayrıca çalışır. – Sathya

12

XmlTextReader yapıcı bir XML dosyası saklanır URL'ye işaret eden bir dize kabul eder. XML'in kendisinin geçersiz bir yol olduğu XML'den geçiyorsunuz. Bunun yerine bu deneyin:

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

Bununla ne yapmam gerekiyor? – Sathya

İlgili konular