日期:2014-05-20  浏览次数:20780 次

struts2 与 xml 的问题 急~~~~~~
我想从jsp中得到数据(已得到)传入action中,在action中把得到的数据保存到xml中,但是在添加的类中 执行到Document doc = db.parse("abc.xml");就自动跳出了。请问一下这个问题怎么解决??

------解决方案--------------------
看看db.parse("abc.xml")中的实现。你用jdom还是dom4j?
------解决方案--------------------
首先,需要建立一个解析器工厂
public static Document getDOM()throws Exception
{
//建立一个解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//从工厂里获得具体的DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();

//从文件中获取DOM对象
Document dom = db.parse(DOM_FILE_PATH);
return dom;
}

/**
* 写DOM对象到文件
* @param dom
* @throws Exception
*/
public static void writeDOM(Document dom) throws Exception
{
File domFile = new File(DOM_FILE_PATH);
//先删除原文件
domFile.delete();

//同样应用了工厂模式
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();

//源
DOMSource source = new DOMSource(dom);
//目的
StreamResult result = new StreamResult(domFile);
//输出
transformer.transform(source, result);
}


/**
* 增加新用户
* @param newUser
*/
public static void addUser(User newUser)throws Exception
{
Document dom = getDOM();

//新检查帐号是否重名-------------------------------
//获得以"login"命名的节点列表
NodeList logins = dom.getElementsByTagName("login");

for (int i = 0; i < logins.getLength(); i++)
{
Node loginNode = logins.item(i);
//节点内容相同
if (loginNode.getTextContent().equals(newUser.getLogin()))
{
throw new Exception("增加新用户失败(帐号重名), login=" + newUser.getLogin());
}
}

//获得以"users"命名的节点列表
NodeList nl = dom.getElementsByTagName("users");
//根节点
Node rootNode = nl.item(0);

//创建1个用户节点
Element userElement = dom.createElement("user");

//login
Element loginElement = dom.createElement("login");
loginElement.setTextContent(newUser.getLogin());
//passwd
Element passwdElement = dom.createElement("passwd");
passwdElement.setTextContent(newUser.getPasswd());
//userName
Element userNameElement = dom.createElement("userName");
userNameElement.setTextContent(newUser.getUserName());
//age
Element ageElement = dom.createElement("age");
ageElement.setTextContent("" + newUser.getAge());
//sex
Element sexElement = dom.createElement("sex");
sexElement.setTextContent(newUser.isGirl() ? "female" : "male");

//在user节点中增加子节点
userElement.appendChild(loginElement);
userElement.appendChild(passwdElement);
userElement.appendChild(userNameElement);
userElement.appendChild(ageElement);
userElement.appendChild(sexElement);
//在users节点中增加子节点user
rootNode.appendChild(userElement);

//写入文件
writeDOM(dom);
}