2010-09-22 88 views
1

我解析气象数据馈送,并将其与某些位置,但出现了错误此消息对一些地方的工作原理:解析错误异常

十月9日至22日: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 2010-09-22 14:52:14

+0

我不相信它是我的代码,它适用于某些订阅源,而不是来自相同来源的其他位置的其他订阅者。 – taraloca 2010-09-22 15:04:32

+0

@taraloca:这是公共天气服务吗?我们可以看看你得到的原始文件吗? – Bobby 2010-09-22 15:46:08

回答

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 2010-09-23 11:48:14

+0

是第28个字符'&'? – Quentin 2010-09-23 11:54:03

0

在尝试读取任何xml文件之前,总是建议检查您尝试读取的xml文档的格式正确。在这种情况下,请尝试在解析天气数据馈送时从xml Feed中获取格式良好的条件。使用C#.Net可以这样做,如下所示: -

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

如果失败它将转到异常块。您可以相应地在异常块中处理Feed。这保证你永远不会得到任何解析异常。我希望它有帮助。

+0

我认为如果仔细查看错误,您会发现它正在被XML解析器抛出 - 简言之,OP已经在执行完全符合您的建议的格式良好检查。 – 2010-09-23 16:55:53

+0

@Robert是的,我确实发现错误与属性值有关,它很容易绕过格式良好的条件。 – 2010-09-23 17:07:57

+0

轻松绕过?错误消息*表示文档格式不正确。 – 2010-09-23 17:20:11