【问题标题】:Java 8 function to remove invalid whitespace from XML tagsJava 8 函数从 XML 标记中删除无效空格
【发布时间】:2020-11-17 14:43:16
【问题描述】:

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

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

不幸的是,遗留系统中没有人员资源来纠正 XML,所以我唯一的选择是在处理数据时修复它。

谁能提供一种使用 Java 8 的巧妙方法来删除 XML 标记中的空格,使其有效解析?

我提取 XML 的原始代码是

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

非常感谢

【问题讨论】:

  • 值得看看 TagSoup 或 validator.nu 等实用程序如何使用它;他们有时可以很好地修复错误的 XML,有时则不行。

标签: java xml java-8 tags


【解决方案1】:

这不是 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();

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 2010-12-13
    • 2021-09-13
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2014-12-31
    相关资源
    最近更新 更多