全部,以下代码抛出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 Exception,我也尝试使用stringreader而不是ByteArray而没有运气
请帮助..谢谢
答案 0 :(得分:0)
当我使用SAXParser时,我发现我需要在文件工作之前将XML标头添加到我的文件中,并且我还需要将所有数据都包含在一个顶级标记中,例如
private static final String XML_HEADER = "<?xml version=\"1.0\"?><z>";
private static final String XML_FOOTER = "</z>"
String xmldata = XML_HEADER +
"<ArrayOfNacionalClass ... your data >" +
XML_FOOTER;
sp.parse(new ByteArrayInputStream(xmldata.getBytes("UTF-8")),
this);
如果您的所有数据始终包含在顶级<z></z>
标记中,则可能不需要上面的ArrayOfNacionalClass
部分。
<ArrayOfNacionalClass>your data</ArrayOfNacionalClass>
如果您将<z></z>
标记保留在那里,则需要在DefaultHandler类中处理它们。
如果没有任何帮助,这里有一些您可能会觉得有用的SAXParser示例代码:
http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
您发布的代码看起来不会编译,除非这是您自己的dataHandler类?如果是这种情况,那么你也应该发布代码。
我建议您使用一个IDE,它可以帮助您在键入时修复编译错误(例如Eclipse)。