【问题标题】:Ignore ESC Special Character on XML Unmarshal Java Spring忽略 XML Unmarshal Java Spring 上的 ESC 特殊字符
【发布时间】:2019-10-15 14:57:19
【问题描述】:

我有一个无法更改的第三方 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;
  }

我有很多不能忽略的开发限制,所以如果可以忽略这个字符,我只能在创建解组器时这样做。

现在解组中断,因为&lt;ID&gt;&lt;![CDATA[888711173110]]&gt;&lt;/ID&gt; 包含无效字符。我想忽略它,好像 CDATA 块包含 888711173110

【问题讨论】:

    标签: java spring xml-parsing


    【解决方案1】:

    我设法通过将文件读取为字节、将其转换为字符串、使用.replace() 删除不需要的字符、将其转换回字节、将其转换为输入流来实现我想要的。

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

    解组器已经期望一个结构良好的 XML,因此我无法在文件读取期间实现我想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2018-04-18
      相关资源
      最近更新 更多