2013-05-09 3 views
0

XDocument로로드하려고 할 때 임의의 오류가 발생하여 XML의 잘못된 문자에 대해 불평합니다.임의의 XML 예외 - 16 진수 값 0x1F 인 잘못된 문자입니다.

' ', hexadecimal value 0x1F, is an invalid character. Line 1, position 1. 

이러한 21 개 위치 중 하나에서 발생하지만 때로는 그렇지 않습니다. 그것은 BBC의 RSS이므로 엄격하게 관리되고 인코딩 된 XML입니다.

I-ÛnÛ8 † ïôhQ [¤¤ÈvÙÁÆEZ “¢hÒä2 %Ú""‰IÅÍ[õúd;”åSì´nÐ,öƦ43üçð‘P|ò­Èáž+-d9t<—:ÀËD¦¢œ ¯WgÝs2zý*VZº–:bFC'3¦Š™Ïçî<p¥šŸÒüF§uœq‰Q[®‹Wûb鬵}ÔF%€8ÉXYò¼yÀG+墼ƒLñéj?YñÒÍÅ=w'“ÄM¤[ß‘9g&ãŠL9O5á%ñ{Gƒ°L‚”=L¥â ÓÆmtχŽæùÔóPñ¡Ãª* 3˜AwX„d™„&ç£ÓÓ1Ü,4 g톀;|È™žÉy¾–ÂðþÁ¦²ˆÉ"´ÝÇÖ1ÚèÈnîmÊ1i\Û°”ëD‰Ê&7 ºXL7Å[m˜*YÀF’e’×vš0_¾2¼¨¸b¦VX™Â\à(qŸ¢©>&›j˼Y9«ÙŒ8ÚW­1‘Õƒ³ÌŒÆËUoÆoáT #t†ÿ’¥6[›ÈXªJªFªšsØÛÃU¡ KSaY~kÁÑ™A\mÅ–)7Lä:&ëÚŒªzòž>ºÊêÐc¸ÀŽùÔÀëGÞ ÂÅ;êQ“¥c'ŠuYnê¸S­òåصÁÚ[ªx4zê®OÒd¡‰Hd‰¿e*îEZcÂþíâ/oey›ÛŠo'3âùîLLcbEVŠÏ# ç"5Ù¨ëÅd±Z2Þ´ØZÚeÛ5²Ù¶ûP<n!ÎAiÄ6‚s_˜Àá_ˆRuWk"#èÿø>†7GáïgowÚxpQ'(6¤KÛû—⸱'ã½ÀyÛˆ>Ie2DA#œùCk¿¬ð²ÁÈ¢Ê:p-´˜ˆ\¬ôš«ø eÚÏŠkÝ÷ŠI>Ö…H¯>ýṆ/BßE࣯Ìóz¡wnÁº¬KÍñ<ù^äypzyµï|>yŒœÕ/ ýO;Ç~ )Ë5wjt—v­J—†]z|åõ"J#¿çŽ(ÊEVÏn¿!ÖÜûQ%EiFaèz¡B÷ÈõÃ~/ˆÉ–}Åש½x)ÑÀu“¡Æ¹¬±éìÛ ™pØLøÅô~ à/ó;à„ìBjñ„KY?Iªç†*Ââm³Úëm²ìeU ±4Œpªë6¿Áÿ_o‹ßVË¥ô¿ä÷ÒNv÷zÜ] BŸ8\ðáý€ýßx3¿' ÞLp?À{¨ ¦ÖtÃ~‡Ú -ÚðYÔE¼μþμÖKQ ¢ : 나는 다운로드에 문제가있는 한 파일을 열 때, 그들은 때때로이 내부 모습

손상 되었습니까? 이 기상 위치가 업데이트되면서 문제가 있습니까?

Public Sub DownloadXML(ByVal URL As String, ByVal SaveAs As String) 
    Try 
     Dim WebClient As New System.Net.WebClient() 

     WebClient.DownloadFile(URL, SaveAs) 
     If My.Settings.LogXMLDownloaded = True Then 
      Module_Log.WriteLog(Now.ToString & " XML Downloaded: " & SaveAs) 
     End If 

    Catch _Exception As Exception 

     ' Error 
     ' MsgBox("Exception caught in process: {0}", _Exception.ToString()) 
     If My.Settings.LogXMLDownloadError = True Then 
      Module_Log.WriteLog(Now.ToString & " XML DL Error: " & _Exception.Message) 
     End If 
    End Try 

End Sub 

: 그리고 여기 내 코드 ...

는 Module_XML_Download입니다

Public Sub DownloadWeather() 

    If IsConnectionAvailable() = True Then 

     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2657832/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Aberdeen.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2656752/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Aviemore.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2653609/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Barra.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2650752/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Dundee.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2650798/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Dumfries.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2651245/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Dingwall.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2650225/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Edinburgh.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2648579/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Glasgow.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2636239/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Harris.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2646088/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Inverness.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2655051/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Islay.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2636790/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Lewis.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2635754/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Mull.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2641108/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Oban.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2645198/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Orkney.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2640358/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Perth.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2644605/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Shetland.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2640006/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Skye.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2635881/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Thurso.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2643811/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Uist.xml") 
     Module_XML_Download.DownloadXML("http://open.live.bbc.co.uk/weather/feeds/en/2635199/3dayforecast.rss", My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Ullapool.xml") 

    End If 

End Sub 

그럼 내 로딩 잠수정 중 하나의 예 :

Public Sub WeatherAviemore_Load() 
    'weatherDoc = XDocument.Load("http://open.live.bbc.co.uk/weather/feeds/en/2656752/3dayforecast.rss") 
    weatherDoc = XDocument.Load(My.Settings.DataMainFolder & "\" & My.Settings.DataWeatherXMLFolder & "\Aviemore.xml") 
    PopulateWeatherListBox(weatherDoc, MainForm.WeatherAviemoreListBox, "Aviemore", "An Aghaidh Mhòr") 
End Sub 

답변

0

당신이 샘플 주는 XML 문서가 아니므로 메시지가 처음부터 잘못되었다고 메시지에 표시됩니다 (Line 1, position 1). XML 문서는이 (wikipedia)과 같아야합니다 : 나는 파일이 때로는 올바르게 다운로드 때로는하지 않는되어 지금 알고있는 것처럼

<?xml version="1.0" encoding="UTF-8" ?> 
<俄语>данные</俄语> 

편집 . 따라서 가장 좋은 해결책은 사실을 수락하고 다시 다운로드를 시도하는 것입니다. 예를 들어

Dim Success As Boolean = False 
    Do 
     Try 
      weatherDoc = XDocument.Load("http://open.live.bbc.co.uk/weather/feeds/en/2656752/3dayforecast.rss") 
      Success = True 
     Catch ex As XmlException 
      Success = False 
     End Try 
    Loop Until Success 

그리고 어쩌면 또 다른 질문 뭔가 물어 "나는 가끔 open.live.bbc.co.uk/weather에서 쓰레기를 다운로드하고 왜?"

+0

RSS 문서는 다음과 같습니다. – rwmck

+0

등 ... – rwmck

+0

그럼 예외가 발생하지 않으면 여기에 쓰는 것처럼 보이게됩니다 ( IvanH

관련 문제