Java8函数从xml标记中删除无效空白

jyztefdp  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(331)

我正在尝试执行一个数据迁移练习,将一系列xml文件加载到新格式中。我发现的问题是,遗留应用程序生成的xml带有无效的标记,即一些标记包含空格,例如:

<Serial>0001</Serial>
<Document ID>12345</Document ID>
<Document Type>TypeA</Document Type>

不幸的是,遗留系统中没有人员资源来更正xml,所以我唯一的选择是在处理数据时修复它。
有没有人能用一种简洁的方法来使用Java8从xml标记中删除空白,使它们能够有效地进行解析?
我最初提取xml的代码是

final XmlMapper xmlMapper = new XmlMapper();
final JsonNode jsonNode = xmlMapper.readTree(metadata);
return objectMapper.convertValue(jsonNode, new TypeReference<Map<String, String>>()

非常感谢

but5z9lq

but5z9lq1#

这不是java8特定的解决方案,但它满足了您的要求。将整个xml作为一个字符串,它使用模式匹配来标识xml标记,并删除其中的任何空格字符。最后, correctXmlString 具有有效的xml标记。

String wrongXmlString = <Document ID>12345</Document ID>;

// Regex for matching xml tags
Matcher matcher = Pattern.compile("<[^>]+>").matcher(str);

// String builder for creating the correct XML.
StringBuffer xmlBuilder = new StringBuffer();

while (matcher.find()) 
{
  // for every string match (i.e., for each tag) 
  String tag = matcher.group();
  // remove any spaces and append the correct string
  matcher.appendReplacement(xmlBuilder, tag.replaceAll(" +", ""));
}

matcher.appendTail(xmlBuilder);

String correctXmlString = xmlBuilder.toString();

相关问题