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

时间:2011-04-01 08:50:26

标签: java xml string

我有一个格式化的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>

提前致谢。

10 个答案:

答案 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">

通过XSLT <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);

link