SAX 解析器问题 NullPointer

发布于 2024-12-12 19:50:40 字数 3275 浏览 0 评论 0原文

所有,以下代码抛出 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦里泪两行 2024-12-19 19:50:40

当我使用 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);

您可能不需要 <;如果您的所有数据始终包含在顶级 ArrayOfNacionalClass 标记中,则上面的 z> 部分。

<ArrayOfNacionalClass>your data</ArrayOfNacionalClass>

如果您保留我的 标记,那么您需要在 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.

  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);

You might not need the <z></z> parts above if all your data will always be enclosed in your top level ArrayOfNacionalClass tag.

<ArrayOfNacionalClass>your data</ArrayOfNacionalClass>

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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文