2011-08-16 52 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()); 
} 
相關問題