如何跳过不使用 JAXB 验证的节点
How to skip nodes that don't validate using JAXB
我的 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 - XML 方法
常见的XML处理方式是将验证和解析分开。验证步骤通常是为了 XML Schema.
- XML 验证始终应用于文档级别。也许之前拆分文档(例如,每个记录一个 DOM)对您的情况有所帮助。参见:
- 验证 - 您可以使用
- 从源文档中整理出有问题的条目(手动任务 - 怪数据提供者?)
- 只反序列化好的
变体 2 - 纯 Java
也可以使用像 Jackson FasterXML to create a rather lax mapping of XML data to Java classes. Find here an example 这样的库来了解如何只读取列表中每个条目的某些属性。
- 将所有数据反序列化为标准 POJO
- 在额外的 java post 处理步骤中验证每个 POJO。
变体 3 - 有所不同
查找每个客户的字节偏移量并将每个客户读取到准备好的 POJO。记录异常并继续下一个。 .
- 创建字节偏移列表
- 对您的 POJO 进行严格反序列化
我的 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 - XML 方法
常见的XML处理方式是将验证和解析分开。验证步骤通常是为了 XML Schema.
- XML 验证始终应用于文档级别。也许之前拆分文档(例如,每个记录一个 DOM)对您的情况有所帮助。参见:
- 验证 - 您可以使用
- 从源文档中整理出有问题的条目(手动任务 - 怪数据提供者?)
- 只反序列化好的
变体 2 - 纯 Java
也可以使用像 Jackson FasterXML to create a rather lax mapping of XML data to Java classes. Find here an example 这样的库来了解如何只读取列表中每个条目的某些属性。
- 将所有数据反序列化为标准 POJO
- 在额外的 java post 处理步骤中验证每个 POJO。
变体 3 - 有所不同
查找每个客户的字节偏移量并将每个客户读取到准备好的 POJO。记录异常并继续下一个。
- 创建字节偏移列表
- 对您的 POJO 进行严格反序列化