2010-09-22 3 views
1

Я разбор фид погоды, и она работает с определенными местами, но ошибками с этим сообщением на некоторых местах:Анализировать Exception Error

09-22 10: 40: 33.364: WARN/System.err (3347): org.apache.harmony.xml.ExpatParser $ ParseException: В строке 465, колонка 29: не хорошо сформирован (недействительный маркер)

Любые идеи, что может происходить?

Вот отрывок из XML:

   <hour time="11 AM"> 
        <url>http://www.....</url> 
        <obsdate>9/22/2010</obsdate> 
        <txtshort>Parcialmente soleado</txtshort> 
        <weathericon>03</weathericon> 
        <temperature>26</temperature> 
        <feelslike>29</feelslike> 
       </hour> 

       <hour time="12 PM"> 
        <url>http://www.....</url> 
        <obsdate>9/22/2010</obsdate> 
        <txtshort>Parcialmente soleado</txtshort> 
        <weathericon>03</weathericon> 
        <temperature>26</temperature> 
        <feelslike>29</feelslike> 
       </hour> 

Линия 465 является «час» тег со значением атрибута 12 вечера. Я зарегистрировал код синтаксического анализа, и он читает xml до тех пор, пока не достигнет этой строки.

+1

Как насчет размещения вашего фактического кода синтаксического анализа и фрагмента сырого XML, который неисправный? – ctacke

+0

Я не считаю, что это мой код, который работает на некоторых каналах, а не на других источниках из разных источников. – taraloca

+0

@taraloca: Это общественное метеорологическое обслуживание? Можем ли мы взглянуть на исходный файл, который у вас есть? – Bobby

ответ

1

Это фактически оказалось непризнанным символом при анализе XML-документа. То, что я сделал, чтобы исправить это было включать в себя тип кодирования, как это: (выбрать кодировку, которая соответствует вашему XML-документ)

InputSource inputSource = new InputSource(is); 
//inputSource.setEncoding("iso-8859-1"); 
inputSource.setEncoding("utf-8"); 
1

Ошибка говорит, что это происходит в столбце 29, а строка, о которой вы сказали, является строкой, содержащей ошибку, длиной всего 18 символов. По всей вероятности, это означает одну из двух вещей: либо эта строка содержит непечатаемые символы, которые мы не можем видеть, одна из которых является одной из небольшой части символов, которые недопустимы в XML, где-то ошибка, и ошибка возникает в следующей строке - вероятно, в URL-адресе, который вы отредактировали.

+0

Это не так, до моего редактирования (для удобочитаемости) длина строки была 36 символов, 29-й символ - 1. – Bobby

+0

Является ли 28-й символ '&'? – Quentin

0

Перед попыткой прочитать любой xml-файл всегда рекомендуется проверить правильность XML-документа, который вы пытаетесь прочитать. В этом случае попробуйте установить условие корректности вокруг корма xml, который вы получаете из поля данных погоды, прежде чем разбирать его. Используя C# .Net, это можно сделать следующим образом: -

XmlDocument doc = new XmlDocument(); 
doc.loadxml(rawXMLcontent); 

Если это не удается, он переходит в блок исключений. Соответственно, вы можете обрабатывать фид в блоке исключений. Это гарантирует, что вы никогда не получите никаких исключений синтаксического анализа. Я надеюсь, что это помогает.

+0

Я думаю, что если вы посмотрите на ошибку близко, вы увидите, что ее выбрасывает синтаксический анализатор XML - короче говоря, OP уже выполняет точно проверку корректности, которую вы предлагаете. –

+0

@Robert Да, я вижу, что ошибка связана с значением атрибута, которое легко проходит условие корректности. –

+0

Легко обходит? Сообщение об ошибке * говорит *, что документ не является корректным. –