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(两次); 展开
问题出在,如果用户输入已存在的“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(两次); 展开
4个回答
展开全部
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所以还会扏行后面的
} } 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所以还会扏行后面的
展开全部
没看到你的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操作。
你在做这一步之前可以先remove掉原来的那个use节点。如:if(doc.getRootElement().getChild("use")!=null)doc.getRootElement().removeChild("use");然后再做add操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询