无法读取XML文件

时间:2013-03-22 09:19:35

标签: java xml struts

当我尝试从我的Java代码中读取xml文件时,我收到错误,如附图所示。 enter image description here

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动作做同样的事情时,我收到了这个错误。请帮帮我。

2 个答案:

答案 0 :(得分:0)

堆栈跟踪表明您使用xerces作为xml解析器(而不是作为jre / jdk一部分的xml解析器)。使用不同的xml解析器可能会导致各种问题。除非你故意这样做,我建议删除它。 (如果你使用像maven这样的构建系统,有时你会在“xercesImpl”或xml-apis“jars上获得传递依赖。你应该在你的pom中排除。”

答案 1 :(得分:0)

尝试使用阅读器解析并指定字符集:

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

我也同意另一个答案,你可能会错误地使用旧的/不同的xml解析器。