为了账号安全,请及时绑定邮箱和手机立即绑定

如何跳过不使用 JAXB 验证的节点

如何跳过不使用 JAXB 验证的节点

回首忆惘然 2021-10-27 16:20:02
我的 xml 文件是这样的:<Customers>    <Customer>        <name>foo</name>        <age>18</age>        <sexe>Male</sexe>    <Customer>    <Customer>         <name>foo1</name>         <age>25</age>         <sexe>Female</sexe>    <Customer>        .        .        .        .        .        .</Customers>这是一个巨大的 XML 文件(超过十万个客户),我需要将其解组然后放入我的数据库中,这是每月的任务。我需要对其进行一些验证,然后如果客户正确将其保存到数据库中,如果客户的任何数据不正确,则记录错误并跳过该客户。我正在考虑将我的验证规则写入 xsd,然后在使用ValidationEventHandler解组期间忽略整个客户。任何人都知道我该怎么做?还是有其他解决办法?我已经在网上搜索了几个小时,但没有找到任何答案。
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

变体 1 - XML 方法

常见的 XML 处理方法是将验证解析分开。验证步骤通常以 XML Schema 为目的。

  1. XML 验证始终应用于文档级别。也许之前拆分文档(例如,每条记录一个 DOM)对您的情况有所帮助。请参阅:如何使用 java 将 XML 文件拆分为多个 XML 文件

  2. 验证 - 您可以使用trang 之类的工具来创建基本的 XSD

  3. 从源文档中整理出有问题的条目(手动任务 - 责怪数据提供者

  4. 只反序列化好的

变体 2 - 纯 Java

也可以使用像Jackson FasterXML这样的库来创建 XML 数据到 Java 类的相当松散的映射。在此处查找有关如何仅读取列表中每个条目的某些属性的示例。

  1. 将所有数据松散地反序列化为标准 POJO

  2. 在附加的 java 后处理步骤中验证每个 POJO。

变体 3 - 有所不同

查找每个客户的字节偏移量并将每个客户读取到准备好的 POJO。记录异常并继续下一个。查找此处描述的完整方法。

  1. 创建字节偏移列表

  2. 对你的 POJO 进行严格的反序列化


查看完整回答
反对 回复 2021-10-27
  • 1 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信