Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从XML标记中删除无效空白的Java 8函数_Java_Xml_Java 8_Tags - Fatal编程技术网

用于从XML标记中删除无效空白的Java 8函数

用于从XML标记中删除无效空白的Java 8函数,java,xml,java-8,tags,Java,Xml,Java 8,Tags,我正在尝试执行数据迁移练习,将一系列XML文件加载到新格式。我发现的问题是,遗留应用程序生成的XML带有无效标记,即一些标记包含空格,例如: <Serial>0001</Serial> <Document ID>12345</Document ID> <Document Type>TypeA</Document Type> 0001 12345 A型 不幸的是,遗留系统中没有人员资源来纠正XML,所以我唯一的选择是在处理

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

<Serial>0001</Serial>
<Document ID>12345</Document ID>
<Document Type>TypeA</Document Type>
0001
12345
A型
不幸的是,遗留系统中没有人员资源来纠正XML,所以我唯一的选择是在处理数据时修复它

有人能用一种简洁的方法来使用Java8删除XML标记中的空白,使它们能够有效地进行解析吗

我最初提取XML的代码是

final XmlMapper xmlMapper = new XmlMapper();
final JsonNode jsonNode = xmlMapper.readTree(metadata);
return objectMapper.convertValue(jsonNode, new TypeReference<Map<String, String>>() 
final XmlMapper XmlMapper=new XmlMapper();
final JsonNode JsonNode=xmlMapper.readTree(元数据);
返回objectMapper.convertValue(jsonNode,newTypeReference()

非常感谢

这不是特定于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();
String错误xmlstring=12345;
//用于匹配xml标记的正则表达式
Matcher Matcher=Pattern.compile(“]+>”).Matcher(str);
//用于创建正确XML的字符串生成器。
StringBuffer xmlBuilder=新的StringBuffer();
while(matcher.find())
{
//对于每个字符串匹配(即,对于每个标记)
String tag=matcher.group();
//删除所有空格并附加正确的字符串
appendReplacement(xmlBuilder,tag.replaceAll(“+”,”);
}
appendTail(xmlBuilder);
String correctXmlString=xmlBuilder.toString();

值得一看TagSoup或validator.nu等实用程序是如何使用它的;它们有时能很好地修复糟糕的XML,有时却不能。