2013-03-22 2 views
0

Когда я пытаюсь прочитать xml-файл из своего Java-кода, я получаю ошибку, как показано на прилагаемом изображении. enter image description hereНе удалось прочитать XML-файл

код Java:

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

попытайтесь открыть XML, используя IE, он даст вам местоположение недопустимого символа. – sgowd

ответ

0

Трассировка стека указывает, что вы используете xerces в качестве вашего XML-анализатора (в отличие от анализатора xml, который является частью jre/jdk). использование другого синтаксического анализа XML может вызвать всевозможные проблемы. если вы не намеренно делаете это, я бы рекомендовал удалить его. (Если вы используете систему сборки, как мавенно, иногда вы получите транзитивные зависимости от «xercesImpl» или XML-APIs»банка. Вы должны исключить эти в вашем П.)

+0

Я не согласен с этим советом. Парсер XML в JDK полностью глючит, Apache Xerces намного лучше. –

+0

@MichaelKay - ну, jdk impl основан на ксерах, хотя и в старой версии. и, да, встроенная версия имеет свои проблемы наверняка. но в 9 раз из 10, когда что-то идет боком при работе с xml, это из-за случайного вытягивания xercesImpl (часто старой версии). в java есть много xml apis (jaxp, jaxws, jaxb), и встроенные иммы имеют по крайней мере преимущество игры друг с другом. – jtahlborn

+0

Ошибки в JDK не влияют на 10% всех запусков, конечно. Вероятно, они влияют только на один пробег в 5000 человек. Это делает ошибки особенно пагубными - вы не открываете их, пока не поедете вживую. –

0

Попробуйте использовать считыватель для анализа и указать набор символов:.?

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

Я также согласен с другим ответом, который вы могли бы вытягивать в старом/другом XML Parser по ошибке

Смежные вопросы