java scanner的问题

求教一个问题,如下代码,向XML文件添加数据,用户输入“id”和“pwd”.首先我判断“id”属性是否存在,如果存在,则重新调用方法;如果不存在,则成功添加。问题出在,如... 求教一个问题,如下代码,向XML文件添加数据,用户输入“id ”和“pwd”.首先我判断“id”属性是否存在,如果存在,则重新调用方法;如果不存在,则成功添加。
问题出在,如果用户输入已存在的“id”(假设输入是id=1,pwd=22,而xml文件里已有id=1,pwd=11数据),再重新调用方法,输入不存在的id(假设id=2,pwd=22),代码运行添加。
在xml文件里面,却会把第一次输入的(id=1,pwd=22)和第二输入的(id=2,pwd=22)两条数据都存进去!

public void Login() throws IOException{
System.out.println("请输入帐号:");
String id = sc.next();
System.out.println("请输入密码:");
String pwd = sc.next();
String xpath = "//root/use";
List<Element>list = doc.selectNodes(xpath);
for(Element e :list){
pwd.equals(e.valueOf("@pwd"));
if(id.equals(e.valueOf("@id"))){
System.out.println("帐号已存在!");
choice();
}
}

System.out.println("fsdsdd"+id);
System.out.println("fsdsdd"+pwd);
doc.getRootElement().addElement("use").addAttribute("id", id).addAttribute("pwd", pwd);

String fileName = "lovo68.xml";
OutputStreamWriter osw =
new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8");
OutputFormat of = OutputFormat.createPrettyPrint();
XMLWriter xml = new XMLWriter(osw,of);
xml.write(doc);
xml.close();

}

=====
原xml文件
<?xml version="1.0" encoding="UTF-8" ?>
- <root year="2010">
<use id="1" pwd="11" />
</root>

现xml的文件
<?xml version="1.0" encoding="UTF-8" ?>
- <root year="2010">
<use id="1" pwd="11" />
<use id="2" pwd="22" />
<use id="1" pwd="22" />
</root>
一楼的兄弟,这样不行!假设我有三个id,123;我注册输入id=3.for循环到id=3时,if判断找原有帐号id=3,提示帐号已存在.但是之前循环到id=1和2时,都会else添加我新注册的id=1(两次);
展开
 我来答
pe...n@sina.com
2010-04-25 · TA获得超过893个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:225万
展开全部
public void choice() throws IOException{ System.out.println("请输入帐号:"); String id = sc.next(); System.out.println("请输入密码:"); String pwd = sc.next(); String xpath = "//root/use"; List<Element>list = doc.selectNodes(xpath); for(Element e :list){ pwd.equals(e.valueOf("@pwd")); if(id.equals(e.valueOf("@id"))){ System.out.println("帐号已存在!"); choice(); return;
} } System.out.println("fsdsdd"+id); System.out.println("fsdsdd"+pwd); doc.getRootElement().addElement("use").addAttribute("id", id).addAttribute("pwd", pwd); String fileName = "lovo68.xml"; OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName),"UTF-8"); OutputFormat of = OutputFormat.createPrettyPrint(); XMLWriter xml = new XMLWriter(osw,of); xml.write(doc); xml.close(); }

貌似少个return所以还会扏行后面的
leanore
2010-05-03 · 超过20用户采纳过TA的回答
知道答主
回答量:79
采纳率:100%
帮助的人:48.9万
展开全部
没看到你的doc是怎么初始化的。问题在这一句:doc.getRootElement().addElement("use").addAttribute("id", id).addAttribute("pwd", pwd);你直接add了一个element,原来的xml中的那个element仍然存在,不会被删除。
你在做这一步之前可以先remove掉原来的那个use节点。如:if(doc.getRootElement().getChild("use")!=null)doc.getRootElement().removeChild("use");然后再做add操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
被坑户内20
2010-04-25 · TA获得超过621个赞
知道小有建树答主
回答量:854
采纳率:0%
帮助的人:471万
展开全部
for 循环里这样改:
for(Element e :list){
pwd.equals(e.valueOf("@pwd"));
if(id.equals(e.valueOf("@id"))){
System.out.println("帐号已存在!");
choice();
}else{
System.out.println("fsdsdd"+id);
System.out.println("fsdsdd"+pwd);
doc.getRootElement().addElement("use").addAttribute("id", id).addAttribute("pwd", pwd);
}
}

然后删除 for 循环后面的:
System.out.println("fsdsdd"+id);
System.out.println("fsdsdd"+pwd);
doc.getRootElement().addElement("use").addAttribute("id", id).addAttribute("pwd", pwd);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琉璃碎琉恋殇
高粉答主

2020-05-11 · 每个回答都超有意思的
知道答主
回答量:9万
采纳率:3%
帮助的人:4315万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式