2011-08-16 18 views
0

我正在尝试将整个XML文档(tagnames/tagtypes不相关)复制到字符串变量中。要使用的语言是Java。我使用ReadAllText在C#中执行此操作,但我需要在Java中找到该命令的等效命令或其他想法,以便能够将整个XML文档作为字符串。我一直在研究这一点。这是一个更大项目的一部分。这是剩下要做的唯一事情。有什么建议么? 在此先感谢。在Java中将XML文档复制到字符串变量中

+4

http://stackoverflow.com/questions/5511096/java-convert-formatted-xml-file-to-one-线串 – Shawn

+0

@Shawn:+1,完美重复。 –

+0

不要忘记对答案提出反馈意见并选择最佳答案 – hbhakhra

回答

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; 
} 
+0

非常感谢。我想通了!我很感激帮助。尽管如此,这是一种不同的方式。总是很高兴学习新的东西! – Balaji

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(); 
     } 
} 
+0

非常感谢。我想通了!我很感激帮助。 – Balaji

+0

如果你喜欢答案,那么你应该选择它作为最好的答案...我知道你是新人,所以我只是想告诉你一些Stack Overflow礼节。 – hbhakhra

0

使用StringWriterStreamResult

注意,要非常小心你在那个字符串后面做什么。如果稍后使用错误的字符编码将其写入某种类型的stream/byte []中,则会生成破碎的xml数据。

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! 
} 

我最初的实现是使用一个实际的缓冲区,但我似乎保持具有刷新缓冲区问题,所以我就这样这是超级容易。

+0

请记住,BufferedReader会在每行结尾处吃掉\ n。 – RealHowTo

+0

这是我最终的目标。我使用XStream作为串行器,它会阻塞新的行字符。最终,我不想在任何版本的代码中使用这些字符,因为我试图忽略XML的纯文本可读性并使用一些XML友好的查看器。 – PaulSCoder

+0

嘿,你知道如何将特定的标签内容复制到字符串中吗?这是我的个人资料中的另一个问题,它有详细信息。我真的很感激你,如果你能帮助我,因为你看起来像一个很好的编码器!谢谢! – Balaji

0

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

  • 如果您使用的BufferedInputStream和读取线,结果丢失换行符
  • 如果你使用一个BufferedReader或扫描仪和读线,结果丢失了原来的换行符的编码可能是错误的。如果你不这样做

    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()); 
} 
相关问题