当我尝试从我的Java代码中读取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 :(得分: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解析器。