Java:将格式化的xml文件转换为一个行字符串

我有一个格式化的XML文件,我想将它转换为一个行字符串,我该怎么做。

示例xml:

   Basic XML 100 5   Basic Java 200 15   

预期产出

  Basic XML1005Basic Java20015 

提前致谢。

 //filename is filepath string BufferedReader br = new BufferedReader(new FileReader(new File(filename))); String line; StringBuilder sb = new StringBuilder(); while((line=br.readLine())!= null){ sb.append(line.trim()); } 

使用StringBuilder比concat http://kaioa.com/node/59更有效

 // 1. Read xml from file to StringBuilder (StringBuffer) // 2. call s = stringBuffer.toString() // 3. remove all "\n" and "\t": s.replaceAll("\n",""); s.replaceAll("\t",""); 

编辑:

我犯了一个小错误,最好在你的情况下使用StringBuilder(我想你不需要线程安全的StringBuffer)

使用通过XSLT 标识转换运行它

           

它将删除任何非重要的空格并生成您发布的预期输出。

打开并读取文件。

 Reader r = new BufferedReader(filename); String ret = ""; while((String s = r.nextLine()!=null)) { ret+=s; } return ret; 

使用此答案提供代码以使用Dom4j进行漂亮打印 ,将输出格式的行更改为: createPrettyPrint() to: createCompactFormat()

 public String unPrettyPrint(final String xml){ if (StringUtils.isBlank(xml)) { throw new RuntimeException("xml was null or blank in unPrettyPrint()"); } final StringWriter sw; try { final OutputFormat format = OutputFormat.createCompactFormat(); final org.dom4j.Document document = DocumentHelper.parseText(xml); sw = new StringWriter(); final XMLWriter writer = new XMLWriter(sw, format); writer.write(document); } catch (Exception e) { throw new RuntimeException("Error un-pretty printing xml:\n" + xml, e); } return sw.toString(); } 

我想你想要读入,忽略空格,然后再写出来。 大多数XML包都有一个忽略空格的选项。 例如,DocumentBuilderFactory为此目的设置了setIgnoringElementContentWhitespace 。

类似地,如果您通过封送对象生成XML,那么JAXB具有JAXB_FORMATTED_OUTPUT

如果要压缩XML文档中的所有空白区域,上述解决方案将起作用。 其他快速选项是JDOM(使用Format.getCompactFormat())和dom4j(使用OutputFormat.createCompactFormat())在输出XML文档时。

但是,我有一个独特的要求,即保留元素文本值中包含的空白区域,这些解决方案无法正常工作。 我只需要删除添加到XML文档中的“漂亮打印”格式。

我想出的解决方案可以在以下3步/正则表达式过程中解释…为了理解解决方案的算法。

 String regex, updatedXml; // 1. remove all white space preceding a begin element tag: regex = "[\\n\\s]+(\\<[^/])"; updatedXml = originalXmlStr.replaceAll( regex, "$1" ); // 2. remove all white space following an end element tag: regex = "(\\)[\\s]+"; updatedXml = updatedXml.replaceAll( regex, "$1" ); // 3. remove all white space following an empty element tag // (): regex = "(/\\>)[\\s]+"; updatedXml = updatedXml.replaceAll( regex, "$1" ); 

注意:伪代码在Java中…’$ 1’是替换字符串,它是第一个捕获组。

这将简单地删除将“漂亮打印”格式添加到XML文档时使用的空白区域,但是当它是元素文本值的一部分时,保留所有其他空白区域。

在java 1.8及以上版本中

 BufferedReader br = new BufferedReader(new FileReader(filePath)); String content = br.lines().collect(Collectors.joining("\n")); 

Underscore -java库有静态方法U.formatXml(xmlstring)。 我是该项目的维护者。 实例

 import com.github.underscore.lodash.U; import com.github.underscore.lodash.Xml; U.formatXml("\n \n \n \n \n", Xml.XmlStringBuilder.Step.COMPACT)); // output:  
 FileUtils.readFileToString(fileName); 

链接