Java:将格式化的xml文件转换为一个行字符串
我有一个格式化的XML文件,我想将它转换为一个行字符串,我该怎么做。
示例xml:
Basic XML 100 5 Basic Java 200 15
预期产出
Basic XML 1005Basic Java 20015
提前致谢。
//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 = "(\\[a-zA-Z0-9-_\\.:]+\\>)[\\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);
链接