SAX 解析器问题 NullPointer
所有,以下代码抛出 NullPointerException。
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
dataHandler dataHandler = new dataHandler();
xr.setContentHandler(dataHandler);
xmldata="<ArrayOfNacionalClass xmlns="http://schemas.datacontract.org/2004/07/ServiceCompras" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><NacionalClass><ProdutoName>Batata Congelada Pré Frita Perdigão 400g</ProdutoName><ProdutoPreco>2,50</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Iogurte Polpa Morango Batavo 540g</ProdutoName><ProdutoPreco>2,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Protetor Solar Loção FPS 15 Sundown 120ml</ProdutoName><ProdutoPreco>16,83</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Costela Bovina Resfriada por kg com Peso Aprox. 1,250 Kg</ProdutoName><ProdutoPreco>10,87</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Refrigerante Pepsi 2 Litros</ProdutoName><ProdutoPreco>2,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Pizza Mussarela Ristorante 340g</ProdutoName><ProdutoPreco>5,98</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Néctar de Uva Del Valle Mais 1,5L</ProdutoName><ProdutoPreco>4,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Batata Original Ruffles 400g</ProdutoName><ProdutoPreco>11,70</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bolo de Chocolate Granulado por kg com Peso Aprox. 0,500 Kg</ProdutoName><ProdutoPreco>14,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Sorvete Especial Diamante Negro Kibon 2L</ProdutoName><ProdutoPreco>15,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bebida Láctea Nescau Fast Nestlé 300ml</ProdutoName><ProdutoPreco>2,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Cerveja Pilsen Nova Schin 473ml</ProdutoName><ProdutoPreco>1,69</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Lava Roupas Líquido Concentrado Omo Multiação 315ml</ProdutoName><ProdutoPreco>5,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Kit Shampoo e Condicionador Controle de Queda 400ml Pantene Pro-V</ProdutoName><ProdutoPreco>17,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Amaciante Comfort Original 500ml</ProdutoName><ProdutoPreco>5,00</ProdutoPreco></NacionalClass></ArrayOfNacionalClass>"
InputSource is=new InputSource(new ByteArrayInputStream(xmldata.getBytes()));
try {
xr.parse(is);
}catch (Exception e)
{
e.printStackTrace();
}
老实说,我不明白为什么它给我 NullPointer 异常,我也尝试使用 stringreader 而不是 ByteArray 但没有运气
请帮助..谢谢
All, the following code is throwing an NullPointerException.
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
dataHandler dataHandler = new dataHandler();
xr.setContentHandler(dataHandler);
xmldata="<ArrayOfNacionalClass xmlns="http://schemas.datacontract.org/2004/07/ServiceCompras" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><NacionalClass><ProdutoName>Batata Congelada Pré Frita Perdigão 400g</ProdutoName><ProdutoPreco>2,50</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Iogurte Polpa Morango Batavo 540g</ProdutoName><ProdutoPreco>2,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Protetor Solar Loção FPS 15 Sundown 120ml</ProdutoName><ProdutoPreco>16,83</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Costela Bovina Resfriada por kg com Peso Aprox. 1,250 Kg</ProdutoName><ProdutoPreco>10,87</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Refrigerante Pepsi 2 Litros</ProdutoName><ProdutoPreco>2,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Pizza Mussarela Ristorante 340g</ProdutoName><ProdutoPreco>5,98</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Néctar de Uva Del Valle Mais 1,5L</ProdutoName><ProdutoPreco>4,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Batata Original Ruffles 400g</ProdutoName><ProdutoPreco>11,70</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bolo de Chocolate Granulado por kg com Peso Aprox. 0,500 Kg</ProdutoName><ProdutoPreco>14,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Sorvete Especial Diamante Negro Kibon 2L</ProdutoName><ProdutoPreco>15,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bebida Láctea Nescau Fast Nestlé 300ml</ProdutoName><ProdutoPreco>2,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Cerveja Pilsen Nova Schin 473ml</ProdutoName><ProdutoPreco>1,69</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Lava Roupas Líquido Concentrado Omo Multiação 315ml</ProdutoName><ProdutoPreco>5,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Kit Shampoo e Condicionador Controle de Queda 400ml Pantene Pro-V</ProdutoName><ProdutoPreco>17,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Amaciante Comfort Original 500ml</ProdutoName><ProdutoPreco>5,00</ProdutoPreco></NacionalClass></ArrayOfNacionalClass>"
InputSource is=new InputSource(new ByteArrayInputStream(xmldata.getBytes()));
try {
xr.parse(is);
}catch (Exception e)
{
e.printStackTrace();
}
I honestly dont understand why its giving me NullPointer Exception, I also tried usind stringreader instead of ByteArray with NO luck
Please help..thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当我使用 SAXParser 时,我发现我需要将 XML 标头添加到我的文件中才能工作,并且我还需要将所有数据包含在单个顶级标记中,例如,
您可能不需要
<;如果您的所有数据始终包含在顶级
部分。ArrayOfNacionalClass
标记中,则上面的 z>如果您保留我的
标记,那么您需要在 DefaultHandler 类中处理它们。如果这些都没有帮助,这里有一些 SAXParser 的示例代码,您可能会觉得有用:
http://www.mkyong。 com/java/how-to-read-xml-file-in-java-sax-parser/
您发布的代码看起来不会编译,除非这是您自己的 dataHandler 类?如果是这种情况,那么您也应该发布该代码。
我建议您使用可以帮助您在键入时修复编译错误的 IDE(例如 Eclipse)。
When I used a SAXParser I found that I needed to add the XML header to my file before it would work, and I also needed to enclose all my data in a single top level tag, e.g.
You might not need the
<z></z>
parts above if all your data will always be enclosed in your top levelArrayOfNacionalClass
tag.If you leave my
<z></z>
tags in then you'll need to handle them in your DefaultHandler class.In case none of that helps, here's some sample code for a SAXParser that you might find useful:
http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
The code you've posted doesn't look like it will compile, unless this is your own dataHandler class? If that's the case then you should post the code for that too.
I recommend you use an IDE that will help you fix compile errors as you type (e.g. Eclipse).