各位帮忙改改程序,谢谢。

P8618282287827770 2011-04-26 08:46:53
源代码import java.io.*;
import util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.XmlDocument;
public class StudentBean
{
String sex;
String name;
int age;
String phone;
public void Setsex(String s)
{
sex=s;
}
public void Setname(String n)
{
name=n;
}
public void Setphone(String p)
{
phone=p;
}
public void Setphone(int a)
{
age=a;
}
public String Getsex()
{
return sex;
}
public String Getphone()
{
return phone;
} public int Getage()
{
return age;
}
public String Getname()
{
return name;
}
}
public class XMLTest
{
private void readXMLFile(String inFile) throw Exception
{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
try
{
db=dbf.newDocumentBuilder();
}catch(ParserConfigurationException pce)
{
System.err.println(pce);
System.exit(1);
}
Document doc;
try
{
doc=db.parse(inFILE);
}catch(DOMException dom)
{
System.err.println(dom.getMessage());
System.exit(1);
}catch(IOException ioe)
{
System.err.println(ioe)
System.exit(1);
}
Element root=doc.getDocumentElement();
//取学生列表元素
NodeList students=root.getElementsByTagName("学生");
for(int i=0,i<students.getLength();i++)
{
Element student=(Element)students.item(i);
StudentBean studentbean=new StudentBean();
studentbean.Setsex(student.getAttribute("性别"));
NodeList names = student.getElementsByTagName("姓名");
if(names.getlength()==1)
{
Element e=(Element)names.item(0);
Text t=(Text)e.getFristChild();
studentbean.Setname(t.getNodeValue());
}
NodeList ages= student.getElementsByTagName("年龄");
if(ages.getlength()==1)
{
Element e=(Element)ages.item(0);
Text t=(Text)e.getFristChild();
studentbean.Setage(Integer.parseInt(t.getNodeValue());
}
NodeList phones= student.getElementsByTagName("电话");
if(phones.getlength()==1)
{
Element e=(Element)phones.item(0);
Text t=(Text)e.getFristChild();
studentbean.Setphone(t.getNodeValue());
}
student_Vector.add(StudentBean);
}
}
private void writeXMLFile(String outFile) throw Exception
{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
try
{
db=dbf.newDocumentBuilder();
}catch(ParserConfigurationException pce)
{
System.err.println(pce);
System.exit(1);
}
Document doc-null;
doc=db.newDocument();
Element root = doc.createElement("学生花名册");
doc.AppentChild(root);
for(int i=0; student_Vector.size();i++)
{
StudentBean studentBean=(StudentBean)student_Vector.get(i);
Element student=doc.createElement("学生");
student.setArribute("性别",StudentBean.Getsex());
root.appendChild(student) ;
Element name=root.createElement("姓名");
student.appendChild(name) ;
Text tname=doc.createTextNode(StudentBean.Getname());
name.appendChild(tname);
Element age=root.createElement("年龄");
student.appendChild(age) ;
Text tage=doc.createTextNode(StudentBean.Getage());
age.appendChild(tage);
Element phone=root.createElement("电话");
student.appendChild(phone) ;
Text tphone=doc.createTextNode(StudentBean.Getphone());
phone.appendChild(tphone);
}
FileOutputStream outStream=new FileOutputStream(outFile);
OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
((xmldocument)doc.write("outWriter","gb2312");
outWriter.close();
outStream.close();
}
public static main(String[] args) throw Exception
{
XMLTest xmltest=new XMLTest();
xmltes.student_Vector = new Vector ();
System.out.println("开始读入数据");
xmltes.readXMLFile("新建文本文档.xml");
System.out.println("读入数据完毕,现在开始写入数据");
xmltes.writeXMLFile("output.xml");
System.out.println("写入完成");
}
}
报错的是XMLTest.java:46: ';' expected
private void readXMLFile(String inFile) throw Exception
...全文
75 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yap2004 2011-04-26
  • 打赏
  • 举报
回复

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

/**
*
* @author Administrator
*
*/
@SuppressWarnings("unchecked")
public class XmlUtil {

public static List praseXmlToList(String xmlStr,Object obj) throws SAXException, IOException {

return praseXmlToList(new InputSource(new StringReader(xmlStr)), obj.getClass());
}

public static List praseXmlToList(String xmlStr,Class clazz) throws SAXException, IOException {

return praseXmlToList(new InputSource(new StringReader(xmlStr)), clazz);
}

public static List praseXmlToList(File file,Object obj) throws FileNotFoundException, SAXException, IOException {

return praseXmlToList(new InputSource(new FileInputStream(file)), obj.getClass());
}

public static List praseXmlToList(File file,Class clazz) throws FileNotFoundException, SAXException, IOException {

return praseXmlToList(new InputSource(new FileInputStream(file)), clazz);
}

public static List praseXmlToList(InputSource source,Object obj) throws SAXException, IOException {

return praseXmlToList(source,obj.getClass());
}

public static List praseXmlToList(InputSource source,Class clazz) throws SAXException, IOException {

MyHandler handler = new XmlUtil().new MyHandler(clazz);
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(handler);
reader.setErrorHandler(handler);
reader.parse(source);

return handler.getList();
}


/**
*
* @param args
* @throws SAXException
* @throws IOException
* @throws DocumentException
*/
public static void main(String [] args) throws SAXException, IOException, DocumentException {

//解析对应的JavaBean
PIWSKC00 bean = new PIWSKC00();

//SAX
List ls = XmlUtil.praseXmlToList(new File("d:/test3.xml"),bean);
System.out.println(ls.size());
//DOM4J
MyXmlReader rd = new XmlUtil().new MyXmlReader(bean.getClass());
List li2 = rd.parseXml(new File("d:/test3.xml"));
System.out.println(li2.size());
}

class MyHandler extends DefaultHandler {

/**当前标签名*/
private String preTag = "";

/**解析对象标志,在DataRow标签开关之间为true*/
private boolean curTag = false;

/**保存已经解析的JavaBean*/
private List list;

/**解析对象的Class*/
private Class clazz;

/**解析对象*/
private Object bean;

/**解析对象的所有字段*/
private Field[] fields;

/**保存解析对象各个字段的Class*/
private Map<String,Class> sortedFields;

/**
* 初始化clazz和fields
* @param clazz
*/
public MyHandler(Class clazz) {
this.clazz = clazz;
this.fields = clazz.getDeclaredFields();
}

/**
* 解析开始初始化sortedFields和需要返回的List
*/
@Override
public void startDocument() throws SAXException {
if(null == list)
list = new ArrayList();
else
list.clear();

if(null == sortedFields)
sortedFields = new HashMap<String,Class>();
else
sortedFields.clear();

for(int i = 0;i < fields.length; i ++) {
Class test = fields[i].getType();
sortedFields.put(fields[i].getName(),test);
}
}

/**
* 通过反射调用Bean的setter填充Bean,其中DataRow标签下的所有子标签
* 分别为该Bean的属性
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(curTag) {
String content = new String(ch,start,length);
if(null != preTag && !"DataRow".equals(preTag.toString())) {
try {
String methodName = getMethodName(preTag);//与该标签相对应的setter
Class attr = sortedFields.get(preTag.toString());
Method method = clazz.getMethod(methodName,attr);
method.invoke(bean, attr.getConstructor(String.class).newInstance(content == null ? "":content));
} catch (Exception e) {
System.out.println("Error by: Class(" + clazz.getName() + ") has no attribute named [" + preTag + "].");
e.printStackTrace();
}
}
}
}

/**
* 通过标签名得到setter
* @param str 标签名
* @return setter
* @throws Exception
*/
private String getMethodName(String str) {
if(str.length() == 1){
return "set" + str.toUpperCase();
}
return "set" + str.substring(0,1).toUpperCase() + str.substring(1,str.length());
}


/**
* DataRow标签的开标记代表一个对象的解析开始,通过构造器构造一个Bean,
* 置curTag标志为true
*/
@Override
public void startElement(String uri, String localName, String qName,Attributes attrs) throws SAXException {


if("DataRow".equals(qName)) {
try {
bean = clazz.getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
curTag = true;
}
preTag = qName;

}

/**
* DataRow标签的关标记代表一个对象的解析结束,将已填充的Bean保存到List,
* 置Bean为null,置curTag标志为false,置preTag为null,跳过characters方法
*/
@Override
public void endElement(String arg0, String arg1, String qName) throws SAXException {
//解析完成一个Bean将
if("DataRow".equals(qName)) {
list.add(bean);
curTag = false;
bean = null;
}
preTag = null;
}

public List getList() {
return list;
}
}

class MyXmlReader {

/**保存已经解析的JavaBean*/
private List resultList;

/**解析对象的Class*/
private Class clazz;

/**解析对象*/
private Object bean;

/**解析对象的所有字段*/
private Field[] fields;

/**保存解析对象各个字段的Class*/
private Map<String,Class> sortedFields;


/**
* 初始化clazz和fields
* @param clazz
*/
public MyXmlReader(Class clazz) {
this.clazz = clazz;
this.fields = clazz.getDeclaredFields();
this.resultList = new ArrayList();
this.sortedFields = new HashMap<String,Class>();

for(int i = 0;i < fields.length; i ++) {
Class test = fields[i].getType();
sortedFields.put(fields[i].getName(),test);
}
}

public List parseXml(File file) throws DocumentException {
SAXReader reader = new SAXReader();
Document doc = reader.read(file);
Element root = doc.getRootElement();

List childList = root.elements();

for(int i = 0; i < childList.size(); i ++ ) {
List list = ((Element)childList.get(i)).elements();
try {
bean = clazz.getConstructor().newInstance();
} catch (Exception e1) {
e1.printStackTrace();
}

for(int j = 0; j < list.size(); j ++ ) {
Element element = (Element) list.get(j);
String eleName = element.getName();

String content = element.getText().trim();

try {
String methodName = getMethodName(eleName);//与该标签相对应的setter
Class attr = sortedFields.get(eleName);
Method method = clazz.getMethod(methodName,attr);
method.invoke(bean, attr.getConstructor(String.class).newInstance(content.equals("") ? (attr.getName().equals("java.math.BigDecimal") ? "0" : "") :content));
} catch (Exception e) {
System.out.println("Error by: Class(" + clazz.getName() + ") has no attribute named [" + eleName + "].");
e.printStackTrace();
}

}
resultList.add(bean);
}
return resultList;
}

private String getMethodName(String str) {
if(str.length() == 1){
return "set" + str.toUpperCase();
}
return "set" + str.substring(0,1).toUpperCase() + str.substring(1,str.length());
}
}

}
gl_Lei 2011-04-26
  • 打赏
  • 举报
回复
代码都没有带注释啊,这可不是良好的编程习惯啊!
sence 2011-04-26
  • 打赏
  • 举报
回复
这个不符合 OO思想吧? 而且太多了 不好看
  • 打赏
  • 举报
回复
为什么不用JSON呢?。。。
血战31天 2011-04-26
  • 打赏
  • 举报
回复
你知道行号 我们不知道行号 估计很难有人会回答里
lw372289iuei2010 2011-04-26
  • 打赏
  • 举报
回复
楼上这位仁兄,很热情。

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧