我有一个格式化的XML文件,我想将其转换为一个行字符串,我该怎么做。
示例xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>Basic XML</title>
<price>100</price>
<qty>5</qty>
</book>
<book>
<title>Basic Java</title>
<price>200</price>
<qty>15</qty>
</book>
</books>
预期输出
<?xml version="1.0" encoding="UTF-8"?><books><book> <title>Basic XML</title><price>100</price><qty>5</qty></book><book><title>Basic Java</title><price>200</price><qty>15</qty></book></books>
提前致谢。
答案 0 :(得分:43)
//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 :(得分:7)
使用identity transform和<xsl:output indent="no">
<xsl:strip-space elements="*"/>
运行它
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no" />
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它将删除任何非重要的空格并生成您发布的预期输出。
答案 2 :(得分:6)
// 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)
答案 3 :(得分:4)
打开并阅读文件。
Reader r = new BufferedReader(filename);
String ret = "";
while((String s = r.nextLine()!=null))
{
ret+=s;
}
return ret;
答案 4 :(得分:2)
Using this answer which provides the code to use Dom4j to do pretty-printing,将输出格式设置为:createPrettyPrint()
的行更改为: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();
}
答案 5 :(得分:1)
我想您想要读入,忽略空格,然后再将其写出来。大多数XML包都有一个忽略空格的选项。例如,为此目的,DocumentBuilderFactory有setIgnoringElementContentWhitespace。
同样,如果您通过编组对象来生成XML,那么JAXB有JAXB_FORMATTED_OUTPUT
答案 6 :(得分:1)
如果要压缩XML文档中的所有空白区域,则上述解决方案有效。其他快速选项是JDOM(使用Format.getCompactFormat())和dom4j(使用OutputFormat.createCompactFormat())在输出XML文档时。
但是,我有一个独特的要求,即保留元素文本值中包含的空白区域,这些解决方案无法正常工作。我所需要的就是删除“漂亮的印刷品”。格式添加到XML文档。
我想出的解决方案可以在以下3步/正则表达式过程中解释...为了理解解决方案的算法。
{{1}}
注意:伪代码在Java中......&#39; $ 1&#39;是替换字符串,它是第一个捕获组。
这将简单地删除添加“漂亮”字样时使用的空白区域。格式化为XML文档,但当它是元素文本值的一部分时,保留所有其他空格。
答案 7 :(得分:1)
在java 1.8及以上版本中
BufferedReader br = new BufferedReader(new FileReader(filePath));
String content = br.lines().collect(Collectors.joining("\n"));
答案 8 :(得分:0)
Underscore-java库具有静态方法U.formatXml(xmlstring)。我是该项目的维护者。 Live example
import com.github.underscore.lodash.U;
import com.github.underscore.lodash.Xml;
public class MyClass {
public static void main(String[] args) {
System.out.println(U.formatXml("<a>\n <b></b>\n <b></b>\n</a>",
Xml.XmlStringBuilder.Step.COMPACT));
}
}
// output: <a><b></b><b></b></a>
答案 9 :(得分:-1)
FileUtils.readFileToString(fileName);