- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个java类,它解析xml文件,并将其内容写入MySQL。一切正常,但问题是当 xml 文件包含无效的 unicode 字符时,会引发异常并且程序停止解析文件。
我的提供商每天都会发送此 xml 文件,其中包含产品列表及其价格、数量等。我无法控制这一点,因此无效字符将始终存在。
我想做的就是捕获这些错误,忽略它们并继续解析 xml 文件的其余部分。
我在 SAXHandler 类的 startElement
、endElement
和 characters
方法上添加了 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>
最佳答案
XML 的理念是不处理不良数据。如果它不是格式良好的 XML,则解析器应该放弃,用户应用程序也应该放弃。从文化上来说,这是对 HTML 文化的一种 react ,人们发现,如果普遍预期数据用户会容忍不良数据,那么结果就是供应商会产生不良数据。
标准可以降低成本,因为您可以使用现成的工具来创建有效数据并在另一端读取数据。如果您决定要交换几乎是 XML 但又不完全是 XML 的内容,那么这些好处就完全抵消了。如果您正在下载软件,如果它不能编译,您就不会忍受它。那么,您为什么要忍受糟糕的数据呢?将其寄回并要求退款。
话虽如此,如果问题是“无效的 Unicode 字符”,那么它可能一开始是良好的 XML,但在传输过程中被损坏。找出问题所在并尽可能接近问题根源进行修复。
关于java SAXParser 忽略异常并继续解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60514789/
我曾经使用 Android 单元测试运行我的单元测试,但后来切换到使用 Robolectric 的 Java 单元测试。我注意到使用 SaxParser DefaultHandler 的不同之处。基本
我有一个 Java SAXparser,可以使用 parse(new InputSource(conn.getInputStream())) 下载和解析。不幸的是,有时在下载站点的 xml 时会出现错
我有一个java类,它解析xml文件,并将其内容写入MySQL。一切正常,但问题是当 xml 文件包含无效的 unicode 字符时,会引发异常并且程序停止解析文件。 我的提供商每天都会发送此 xml
我正在为 Android 开发 RSS 提要阅读器,并且为了解析 XML 文件,我使用 SAX API。问题是,在解析数据时,一些文本在一些随机选择的标签中以随机方式被截断(我的意思是同一标签的不同实
我有 xml 结构 id dataTitle title1 title2 我想解析它并仅将标题元素保存在条目下的列表中。如何在
我有一个 org.xml.sax.helpers.DefaultHandler 的实现,它工作正常,除非它出现这样的情况: Jiří Bárta 字符方法被重写为: @O
如果我在 ansi xml 文件中放入一个 utf8 字符 » 并尝试使用 SAXParser 解析它,那么它的解析不会出现任何错误。为什么它没有抛出任何异常? 示例 xml 文件。保存为ansi编码
这很奇怪.. 我有一个 DefaultHandler,它实际上可以很好地处理所有事情,但有时,没有明显的原因,它会给我 0 而不是正确的值。这种情况每次都在同一个地方发生,所以有问题,但我不知道是什么
我在 android/java 上用 SAXParser 等做一些简单的 SAXParsing 它可以正确解析文件,但是当它遇到一些特殊字符时会打嗝,例如如果它解析下面这个 xml: 当它在
我正在尝试构建我的第一个 XML 模式 validator 作为我的代码库和许多项目中的可重用组件。我花了一整天的时间尝试遵循示例并对其进行编码,现在已经启动并运行了概念验证。 唯一的问题是,它给了我
我正在使用 saxparser 来从文件中获取 xml 标签内容。对于非长数据 xml,一切正常。然而,当到达某个位置时,characters() 事件收到截断的 ch[] 并被触发两次。例如,123
我在 Android 应用程序中使用 SAX 解析器一次读取一些提要。脚本执行如下。 // Begin FeedLezer
我有以下格式的 XML: ... "Paul McCartney" "John Lennon" ... SAXParser 一旦到达电子邮件地址就会抛出异常。它认为是一个 XML 元素,一旦遇到
我在 Java 中使用 SAXParser。 有没有办法在使用 SAXParser 解析 xml 时关闭转义? 例如,我有以下 xml: „title” 我想通过c
我正在查看http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX9.html 。 您可以通过两种方式将 xml 文件与架构关联起来:在应用程序中或
我正在开发一个小型应用程序,该应用程序使用 xml 文件来打印章节的 ArrayList,后者又指向特定的 html 文件。 我使用本教程开始:http://www.anddev.org/novice
我正在向 SAXParser 传递一个 XML 文件和一个处理程序,但收到此错误: parse 方法的属性定义为 (File, DefaultHandler) ,它完全匹配,所以我不确定哪里出错了。完
我需要使用一组模式对传入的 XML 片段执行一些验证。 所有这些架构共享相同的 targetNamespace,但分为不同的 .xsd 文件。 我的java程序正在将每个xsd文件加载到InputSo
我不知道如何正确表达这个问题,但我会举一个例子。 假设我想知道标签block的属性type我可以 if (localName == "block") { int type = Integer
PARAMETRI: vrednost: 2.0 rank: 0.75 − objekt: irc.kis.model.pomozniRazredi.CasovniInterval.CasovniI
我是一名优秀的程序员,十分优秀!