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