2013-07-10 3 views
1

Java에서 전체 XML 파일을 읽으려고합니다. 다음은 내 XML 파일 - 아래Java에서 전체 XML 파일을 String으로 읽으려고 시도합니다.

<?xml version="1.0" encoding="UTF-8"?> 
     <app hash='nv', name='Tech', package = '1.0', version='13', filesize='200', create_date='01-03-1987', upate_date='07-09-2013' > 
      <url> 
       <name>RJ</name> 
       <score>10</score> 
      </url> 
      <url> 
       <name>ABC</name> 
       <score>20</score> 
      </url> 
     </app> 

그리고 내 코드는, 나는 위의 그림과 같이 전체 XML 파일을 읽고 그 XML 파일에서 해시, 이름, 패키지 등의 값을 얻기 위해 사용하고 있습니다.

public static void main(String[] args) { 

try { 
    File fXmlFile = new File("C:\\ResourceFile\\app.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(fXmlFile); 

    System.out.println(doc); 

} catch (Exception e) { 

} 
} 

그리고 최대한 빨리 위의 프로그램을 실행하고있다. 나는 항상 일어나고있는 이유 excpetion-

[Fatal Error] app.xml:2:22: Element type "app" must be followed by either attribute specifications, ">" or "/>". 

아래의 모든 아이디어는 무엇입니까?

+1

를 사용할 수있는 자바 8에서, 당신은 왜 그것을 통해 실행하는 XML 파서? –

+1

왜 * * 속성은 * 쉼표로 구분됩니까? – adatapost

+1

@Matt, XML 파서를 통해 어떻게해야할지 생각했습니다. 어떻게해야합니까? 다른 아이디어? – AKIWEB

답변

9

XML에 구문 오류가 있습니다. 요소의 속성은 쉼표로 구분하면 안됩니다. 그것은해야한다, 같은

<?xml version="1.0" encoding="UTF-8"?> 
<app hash='nv' name='Tech' package='1.0' version='13' filesize='200' create_date='01-03-1987' upate_date='07-09-2013' > 
    <url> 
     <name>RJ</name> 
     <score>10</score> 
    </url> 
    <url> 
     <name>ABC</name> 
     <score>20</score> 
    </url> 
</app> 
5

당신은 XML로 구문 분석 만 어쩌면 당신은 BufferedReader 및 작성한 Readline (사용하고자하는 문자열로 표시하는)을 StringBuilder 다음 쇼에 저장하지 않으려면 그것. How to read a file

예 :

public String readFile(String path) throws IOException{ 
      StringBuilder sb = new StringBuilder(); 
    try (BufferedReader br = new BufferedReader(new FileReader(path))){ 

     while ((String sCurrentLine = br.readLine()) != null) { 
      sb.append(sCurrentLine); 
     } 

    } 

      return sb.toString(); 
    } 

편집 당신이 정말 원하는 경우 단순히 문자열로

String xml = Files.lines(Path.getPath(path)).collect(Collectors.joining("\n")); 
+0

하지만 파일의''행은 무시됩니다. – bvdb

0
try{ 
    InputStream is = getAssets().open("HeadWork_JackWell.xml"); 

    DocumentBuilderFactory dFactory= DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder= dFactory.newDocumentBuilder(); 
    Document doc= dBuilder.parse(is); 
    try { 
     StringWriter sw = new StringWriter(); 
     TransformerFactory tf = TransformerFactory.newInstance(); 
     Transformer transformer = tf.newTransformer(); 
     transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
     transformer.setOutputProperty(OutputKeys.METHOD, "xml"); 
     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 

     transformer.transform(new DOMSource(doc), new StreamResult(sw)); 
    String s=sw.toString(); 
    System.out.println(s); 
    } catch (Exception ex) { 
     throw new RuntimeException("Error converting to String", ex); 
    } 
관련 문제