将XML文档复制到Java中的字符串变量中

时间:2011-08-16 18:48:52

标签: java xml string xml-parsing

我正在尝试将整个XML文档(tagnames / tagtypes irrelavant)复制到String varible中。要使用的语言是Java。我使用ReadAllText在C#中执行此操作,但我需要在Java中找到该命令的等效命令或其他想法,以便能够将整个XML文档作为String。我一直在研究这个问题。这是一个更大项目的一部分。这是唯一还有待完成的事情。有什么建议? 在此先感谢。

5 个答案:

答案 0 :(得分:1)

因为这是java而不是脚本语言,所以您只需要使用扫描仪或文件阅读器并逐行读取它并将其附加到单个字符串中。

This website非常了解java中的文件io。在了解了文件io后,我实际上学到了很多东西。

以下是您可以做的事情的示例:

private void processFile(File file)
{
        StringBuilder allText = new StringBuilder();
        String line;
        Scanner reader = null;
        try {
            FileInputStream fis = new FileInputStream(propertyFile);
            InputStreamReader in = new InputStreamReader(fis, "ISO-8859-1");
            reader = new Scanner(in);
            while(reader.hasNextLine() && !errorState)
            {
                line = reader.nextLine();
                allText.append(line);
            }
        } catch (FileNotFoundException e)
        {
            System.err.println("Unable to read file");
            errorState=true;
        } catch (UnsupportedEncodingException e) {
            System.err.println("Encoding not supported");
            errorState=true;
        }
        finally
        {
            reader.close();
        }
}

答案 1 :(得分:0)

请尝试以下代码:

public String convertXMLFileToString(String fileName) 
{ 
    try { 
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
        InputStream inputStream = new FileInputStream(new File(fileName)); 
        org.w3c.dom.Document doc = documentBuilderFactory.newDocumentBuilder().parse(inputStream); 
        StringWriter stw = new StringWriter(); 
        Transformer serializer = TransformerFactory.newInstance().newTransformer(); 
        serializer.transform(new DOMSource(doc), new StreamResult(stw)); 
        return stw.toString(); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } 
    return null; 
}

答案 2 :(得分:0)

StringWriterStreamResult一起使用。

请注意,要非常小心在之后使用该字符串。如果您稍后使用错误的字符编码将其写入某种流/ byte [],则会生成损坏的xml数据。

答案 3 :(得分:0)

上次我这样做时,我使用了缓冲式读卡器。工作得很好。

String output = "";
try {
  FileInputStream is = new FileInputStream(file);
  BufferedReader br = new BufferedReader(new InputStreamReader(is));
  String line = "";
  while ((line = br.readLine()) != null) {
    output = output + line;
  }
  br.close();
  is.close();
} catch(IOException ex) {
  //LOG!
}

我最初的实现是使用一个实际的缓冲区,但我似乎一直有刷缓冲区的问题所以我采用这种方式非常容易。

答案 4 :(得分:0)

许多答案几乎可以,但不完全正确。

  • 如果您使用BufferedInputStream并读取行,则结果是缺少换行符
  • 如果您使用BufferedReader或扫描仪并读取行,则结果会丢失原始换行符,但编码可能有误。
  • 如果在结果中使用Writer,则编码可能与源
  • 不匹配

如果你肯定知道源编码,你可以这样做:

String file2string(File f, Charset cs) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream(10000);
    InputStream in = new BufferedInputStream(new FileInputStream(f));
    int c;
    while ((c = in.read()) != -1)
        out.write(c);
    in.close();
    return out.toString(cs.name());
}

如果您不知道源编码,请依赖XML解析器来检测它并控制输出:

String transform2String(File f, Charset cs) throws IOException,
        TransformerFactoryConfigurationError, TransformerException {
    Transformer t = TransformerFactory.newInstance().newTransformer();
    t.setOutputProperty(OutputKeys.ENCODING, cs.name());
    ByteArrayOutputStream out = new ByteArrayOutputStream(10000);
    t.transform(new StreamSource(new BufferedInputStream(
            new FileInputStream(f))), new StreamResult(out));
    return out.toString(cs.name());
}