java SAXParser忽略异常并继续解析

问题描述 投票:0回答:2

我有一个Java类,该类解析一个xml文件,并将其内容写入MySQL。一切正常,但是问题是当xml文件包含无效的unicode字符时,抛出异常并且程序停止解析该文件。

我的提供者每天发送此xml文件,并提供其价格,数量等的产品清单,我对此无能为力,因此无效字符将始终存在。

我想做的就是捕获这些错误,忽略它们并继续解析xml文件的其余部分。

我已经在SAXHandler类的startElementendElementcharacters方法上添加了try-catch语句,但是,它们没有捕获任何异常,并且只要解析器发现无效字符,执行就会停止。

似乎我只能从调用解析器的函数中捕获这些异常:

    try {
        myIS = new FileInputStream(xmlFilePath);
        parser.parse(myIS, handler);
        retValue = true;
    } catch(SAXParseException err) {
        System.out.println("SAXParseException " + err);
    }

但是,即使在异常告诉我无效字符在哪里的情况下,这也无济于事,因为执行会停止,因此产品列表远非完整。该列表包含大约8,000个产品,并且只有几个无效字符,但是,如果该无效字符位于前100个产品中,则不会在数据库中更新所有7,900个产品。我还注意到,如果发生异常,则不会调用endDocument方法。

几年前有人在这里问过同样的问题,但没有得到任何解决方案。

我真的很感谢任何想法或解决方法。

数据样本(根据要求):

<Producto>
 <Brand>
  <Description>Epson</Description>
  <ManufacturerId>eps</ManufacturerId>
  <BrandId>eps</BrandId>
  </Brand>
 <New>false</New>
 <OnSale>null</OnSale>
 <Type>Physical</Type>
 <Description>Epson TM T88V - Impresora de recibos - línea térmica - rollo 8 cm - hasta 300 mm/segundo - paralelo, USB</Description>
 <Category>
  <CategoryId>pos</CategoryId>
  <Description>Puntos de Venta</Description>
  <Subcategories>
   <CategoryId>pos.printer</CategoryId>
   <Description>Impresoras para Recibos</Description>
  </Subcategories>
 </Category>
 <InStock>0</InStock>
 <Price>
  <UnitPrice>4865.6042</UnitPrice>
  <CurrencyId>MXN</CurrencyId>
 </Price>
 <Manufacturer>
  <Description>Epson</Description>
  <ManufacturerId>eps</ManufacturerId>
 </Manufacturer>
 <Mpn>C31CA85814</Mpn>
 <Sku>PT910EPS27</Sku>
 <CompilationDate>2020-02-25T12:30:14.6607135Z</CompilationDate>
</Producto>
java xml saxparser
2个回答
0
投票

XML的哲学是,您不处理不良数据。如果XML格式不正确,则解析器应该放弃,而用户应用程序应该放弃。从文化上讲,这是对HTML文化的一种反应,在HTML文化中,人们发现,如果通常认为数据用户可以容忍不良数据,那么后果就是供应商将产生不良数据。

标准可降低成本,因为您可以使用现成的现成工具来创建有效数据和从另一端读取数据。如果您决定要交换几乎是XML却不是完全XML的东西,那么这些好处将被完全抵消。如果您正在下载软件,那么即使它没有编译,您也不会忍受。那么,您为什么准备忍受不良数据呢?寄回并要求退款。

话虽如此,如果问题是“无效的Unicode字符”,那么它很可能以XML开头并在传输中被破坏。找出问题出在哪里,并尽可能地将其解决,以解决问题的根源。


0
投票

我解决了在处理XML文件之前删除XML文件的无效字符的问题。

我无法做我想做的事情(出错并继续),但是此解决方法有效。

© www.soinside.com 2019 - 2024. All rights reserved.