2011-08-16 3 views
0

전체 XML 문서 인 tagnames/tagtypes irrelavant를 String 변수에 복사하려고합니다. 사용할 언어는 Java입니다. C#에서 ReadAllText를 사용했지만 전체 XML 문서를 String으로 가질 수 있도록 Java 또는 다른 아이디어에서 해당 명령을 찾아야합니다. 나는 이것을 잠시 동안 일해왔다. 이것은 더 큰 프로젝트의 일부입니다. 이것은 할 일이 남아 있습니다. 어떤 제안? 미리 감사드립니다.XML 문서를 Java의 문자열 변수에 복사

+4

http://stackoverflow.com/questions/5511096/java-convert-formatted-xml-file-to-one- : 출력을 감지하고 제어하는 ​​소스 인코딩을 알고, XML 파서에 의존 라인 문자열 – 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

.

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

를 사용하여 A StreamResultStringWriter : 여기

당신이 무엇을 할 수 있는지의 샘플입니다.

참고 이후에 해당 문자열로 수행하는 작업에 매우주의하십시오. 나중에 잘못된 문자 인코딩을 사용하는 일종의 스트림/바이트 []에 쓰면 깨진 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

많은 답변이 있지만 거의 정확하지는 않습니다. 당신이 선을 BufferedReader의 또는 스캐너를 사용하고 읽는다면 당신은 라인을 BufferedInputStream을 사용하고 읽는다면

  • , 결과가없는 라인 결과는 원래의 라인은 인코딩이 잘못 될 수있다 나누기 누락
  • 나누기 . 당신이 결과에 라이터를 사용하는 경우에 긍정적 인 소스 인코딩을 알고 있다면
  • , 인코딩이 소스

과 일치하지 않을 수 있습니다, 당신은이 작업을 수행 할 수 있습니다

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

을 그렇게하지 않으면

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