java - 忽略 XML Unmarshal Java Spring 上的 ESC 特殊字符

标签 java spring xml-parsing

我有一个无法更改的第三方 xml 文件。 XML 中的字段之一在字段值的中间有 ESC 字符。 我想添加一个 unmarshal 属性,该属性仅忽略它找到的所有 ESC 字符字段。

可以这样做吗?如果是,怎么办?

这是我用来解码自定义类的读取流 TransactionType 。另外,后者无法更改。

  @Bean
  public MultiResourceItemReader<TransactionType> customItemReader() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    marshaller.setCheckForXmlRootElement(false);
    marshaller.setClassesToBeBound(TransactionType.class);
    marshaller.supports(TransactionType.class);

    StaxEventItemReader<TransactionType> posLogStaxEventItemReader = new StaxEventItemReader<>();
    posLogStaxEventItemReader.setUnmarshaller(marshaller);
    posLogStaxEventItemReader.setFragmentRootElementName("{http://www.nrf-arts.org/IXRetail/namespace/}Transaction");

    MultiResourceItemReader<TransactionType> transactionReader = new MultiResourceItemReader<>();
    transactionReader.setDelegate(posLogStaxEventItemReader);

    return transactionReader;
  }

我有很多无法忽略的开发限制,因此如果可以忽略此字符,我只能在创建解码器时执行此操作。

现在解码中断,因为 <ID><![CDATA[888711173110]]></ID>有无效字符。我想忽略它,就好像 CDATA block 包含 888711173110 一样

最佳答案

我成功地通过将文件读取为字节,将其转换为字符串,使用 .replace() 删除不需要的字符,将其转换回字节,将其转换为输入流来实现我想要的目标.

不是优雅的解决方案,但它有效。

解码器已经期望一个构造良好的 XML,因此我在文件读取过程中无法实现我想要的效果。

关于java - 忽略 XML Unmarshal Java Spring 上的 ESC 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397560/

相关文章:

xml - cvc-enumeration-valid : Value '2' is not facet-valid with respect to enumeration '[1]' . 它必须是枚举中的一个值

c - 用 C 解析 XML

java - 我父级的类方法没有接收我的实例变量值

java - 如何将数字放在 int 的末尾(而不是求和)?

database - 带有数据库 : java. lang.ClassNotFoundException : org. springframework.security.core.userdetails.jdbc.JdbcDaoImpl 的 Spring Security 应用程序

java - 在启动应用程序之前如何在项目中创建目录?

java - 我如何告诉我的数据库某些更改是由 hibernate 而不是其他应用程序进行的?

java - 策略模式和命令模式的区别

java - Spring Ehcache MBean 监控

c++ - 没有可行的 XML 解析程序重载