2013-03-22 5 views
0

Java 코드에서 xml 파일을 읽을 때 첨부 된 이미지와 같이 오류가 발생합니다. enter image description hereXML 파일을 읽을 수 없습니다.

자바 코드 :

내가 메인 클래스를 사용하여 동일한 응용 프로그램을 실행하고
public ActionForward xmlupload(ActionMapping mapping, 
      ActionForm form, HttpServletRequest request, 
      HttpServletResponse response) throws IOException, ServletException { 

    String target = new String("success"); 

    System.out.println("I AM IN ACTION"); 
List<XmltodbBO> branchList = new ArrayList<XmltodbBO>(); 
try { 
     File file = new File("D:\\FNDWRR.xml"); 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(file); 
     doc.getDocumentElement().normalize(); 
     System.out.println("Root element " + doc.getDocumentElement().getNodeName()); 
    NodeList nodeLst = doc.getElementsByTagName("fsg:RptLine"); 
     System.out.println("Root Tag value"); 
     XmltodbDAO sim=new XmltodbDAO(); 

     for (int s = 0; s < nodeLst.getLength(); s++) { 
      XmltodbBO bO=new XmltodbBO(); 
     Node fstNode = nodeLst.item(s); 

     if (fstNode.getNodeType() == Node.ELEMENT_NODE) { 



       Element fstElmnt = (Element) fstNode; 
      NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("fsg:RptCell"); 
      System.out.print(fstNmElmntLst.getLength()); 
      Node current = fstNmElmntLst.item(0); 

       if(current.getNodeType() == Node.ELEMENT_NODE){ 


       String nodeName = current.getNodeName(); 
       Element fstNmElmnt = (Element) fstNmElmntLst.item(0); 

       NodeList fstNm = fstNmElmnt.getChildNodes(); 
       Text itemCheckedText = (Text) fstNm.item(0); 
       if (itemCheckedText != null) { 
       System.out.println("Tag value : " + ((Node) fstNm.item(0)).getNodeValue()); 
       bO.setFirstfieldName(fstNm.item(0).getNodeValue()); 

       } 

       } 



      if(fstNmElmntLst.getLength()>1){ 

       Node current1 = fstNmElmntLst.item(1); 
       if(current1.getNodeType() == Node.ELEMENT_NODE){ 
       Element fstNmElmnt = (Element) fstNmElmntLst.item(1); 
       NodeList fstNm = fstNmElmnt.getChildNodes(); 
       Text itemCheckedText1 = (Text) fstNm.item(0); 
       if (itemCheckedText1 != null) { 
       System.out.println("Tag value : " + ((Node) fstNm.item(0)).getNodeValue()); 
       bO.setSecondfieldName(fstNm.item(0).getNodeValue()); 

       } 
       } 


       } 

      if(fstNmElmntLst.getLength()>2){ 

       Node current1 = fstNmElmntLst.item(2); 
       if(current1.getNodeType() == Node.ELEMENT_NODE){ 
       Element fstNmElmnt = (Element) fstNmElmntLst.item(2); 
       NodeList fstNm = fstNmElmnt.getChildNodes(); 
       Text itemCheckedText1 = (Text) fstNm.item(0); 
       if (itemCheckedText1 != null) { 
       System.out.println("Tag value : " + ((Node) fstNm.item(0)).getNodeValue()); 
       bO.setThirdfieldName(fstNm.item(0).getNodeValue()); 

       } 
       } 


       } 
     } branchList.add(bO); } 

     sim.adddb(branchList); 


       } 

catch (Exception e) { 
    e.printStackTrace(); 
    } 
    return (mapping.findForward(target)); 
} 

, 그것은 잘 작동합니다. 그러나 struts 액션을 사용하여 동일한 작업을 수행하려고 할 때이 오류가 발생합니다. 제발 도와주세요.

+0

를 오류는 비정상적인를 찾는 것 상태 XML에있는 글자 ... 게시 할 수 있습니까? – fcm

+0

XML 파일 게시 –

+0

IE를 사용하여 XML을 열려고하면 잘못된 문자가있는 위치가 표시됩니다. – sgowd

답변

0

스택 추적은 xerces를 XML 파서로 사용하고 있음을 나타냅니다 (jre/jdk의 일부인 xml 파서와 반대). 다른 xml 파서를 사용하면 모든 종류의 문제가 발생할 수 있습니다. 의도적으로 그렇게하지 않는 한, 제거하는 것이 좋습니다. (당신이 받는다는 같은 빌드 시스템을 사용하는 경우, 때로는 "xercesImpl"또는 XML-API를 "항아리에 이적 종속성을 얻을 것이다. 당신이 당신의 치어에 다음을 제외한다.)

+0

나는이 충고에 강력히 동의하지 않는다. JDK의 XML 파서는 완전히 버그가 있으며 Apache Xerces가 훨씬 좋습니다. –

+0

@MichaelKay - 음, jdk impl은 오래된 버전 임에도 불구하고 xerces를 기반으로합니다. 그리고 네, builtin 버전에는 확실히 문제가 있습니다. xml으로 작업 할 때 뭔가가 옆으로 간다면 10 번 중 9 번, 실수로 xercesImpl (종종 구버전)을 가져 오는 것입니다. 자바에서 많은 xml apis (jaxp, jaxws, jaxb)가 있으며 내장 함수는 적어도 서로 놀면서 이익을 얻는다. – jtahlborn

+0

JDK의 버그는 모든 실행의 10 %에는 영향을주지 않습니다. 그들은 아마 단지 5,000의 1 개의 실행에 영향을 미친다. 버그는 특히 악의적 인 것입니다 - 당신이 살 때까지 발견하지 못합니다. –

0

구문 분석하는 판독기를 사용하여 시도 문자 집합을 지정합니다.? 나는 또한 당신이 실수로 오래된/다른 XML 파서 당기는 될 수있는 다른 대답에 동의

Document document = builder.parse(new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8")); 

을 캐릭터가 사용하는

관련 문제