使用java修改XML文件中的特定元素

使用java修改XML文件中的特定元素,java,xml,io,Java,Xml,Io,我目前正在尝试使用一个XML文件,根据该文件,我需要更新特定的数据 在这种情况下,.xml文件存储了来宾信息列表,程序必须允许用户随时更改来宾的详细信息。 下面是my.xml文件的一个示例以及应该更新元素的代码 我目前面临的问题是,它每次只会更改第一个来宾的值(John)。如何使用传入的“position”参数来查找特定的来宾节点?e、 g位置=2,大卫的名字将被更改。 任何帮助都将不胜感激 <?xml version="1.0" encoding="UTF-8" standalone="

我目前正在尝试使用一个XML文件,根据该文件,我需要更新特定的数据

在这种情况下,.xml文件存储了来宾信息列表,程序必须允许用户随时更改来宾的详细信息。 下面是my.xml文件的一个示例以及应该更新元素的代码

我目前面临的问题是,它每次只会更改第一个来宾的值(John)。如何使用传入的“position”参数来查找特定的来宾节点?e、 g位置=2,大卫的名字将被更改。 任何帮助都将不胜感激

<?xml version="1.0" encoding="UTF-8" standalone="no"?><data>
<Guest_List>
    <Guest>
    <name>John</name>
    <address>NTU Hall 17 #01-111</address>
    <country>Singapore</country>
    <gender>Male</gender>
    <nationality>Singaporean</nationality>
    <contact>92003239</contact>
    <creditCardNo>1234567812345678</creditCardNo>
    <creditCardCSV>432</creditCardCSV>
    <creditCardExpDate>11/16</creditCardExpDate>
    <identity>U0000000I</identity>

</Guest>
<Guest>
    <name>David</name>
    <address>Jurong East St32 #02-222</address>
    <country>Singapore</country>
    <gender>Male</gender>
    <nationality>Singaporean</nationality>
    <contact>93482032</contact>
    <creditCardNo>1234567812345678</creditCardNo>
    <creditCardCSV>588</creditCardCSV>
    <creditCardExpDate>3/16</creditCardExpDate>
    <identity>U1234567I</identity>
    </Guest>  
</Guest_List>
</data>

约翰
台大礼堂17#01-111
新加坡
男性
新加坡人
92003239
1234567812345678
432
11/16
U0000000I
大卫
裕廊东大街32号#02-222
新加坡
男性
新加坡人
93482032
1234567812345678
588
3/16
U1234567I
方法呢

public static void updateGuestList(int position,ArrayList<Guest> g){
try{

    String filepath = "guestList.xml";
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(filepath);
    NodeList nodes1 = doc.getElementsByTagName("Guest_List");
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File(filepath));

    System.out.println("1.)Update Name:\n2.)Update Address:\n3.)"
            + "Update Country:\n4.)Update Gender:\n5.)Update Contact:\n"
            + "6.)Update Nationality:\n7.)Update Credit card number:\n"
            + "8.)Update Credit card CSV code:\n9.)Update Credit card expiry date:\n"
            + "10.)Update Identification No:");



int userInput = sc.nextInt();
switch(userInput){
case 1:
    System.out.println("1.)Enter new Name:");
    String name = sc.next();
    for(int j=0;j<nodes1.getLength();j++)
    {
        //Get the staff element by tag name directly
        Node nodes = doc.getElementsByTagName("Guest").item(j);
        //loop the staff child node
        NodeList list = nodes.getChildNodes();

        for (int i = 0; i != list.getLength(); ++i)
        {
            Node child = list.item(i);

           if (child.getNodeName().equals("name")) {

               child.getFirstChild().setNodeValue(name) ;

           }

       }
   }

    transformer.transform(source, result);
     g.get(position).setGuestName(name);
    break;
}


}

catch(Exception e){
    e.printStackTrace();
}

}
publicstaticvoidupdateguestlist(int位置,arraylistg){
试一试{
字符串filepath=“guestList.xml”;
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
Document doc=docBuilder.parse(文件路径);
NodeList nodes1=doc.getElementsByTagName(“来宾列表”);
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
DOMSource=新的DOMSource(doc);
StreamResult=newstreamresult(新文件(filepath));
System.out.println(“1.)更新名称:\n2.)更新地址:\n3.)”
+“更新国家:\n4。)更新性别:\n5。)更新联系人:\n”
+“6.)更新国籍:\n7.)更新信用卡号码:\n”
+“8.)更新信用卡CSV代码:\n9.)更新信用卡到期日期:\n”
+“10.)更新识别号:”;
int userInput=sc.nextInt();
开关(用户输入){
案例1:
System.out.println(“1”)输入新名称:”;
字符串名称=sc.next();

对于(int j=0;j使用
setTextContent()。

并检查节点类型是否为
node.ELEMENT\u node


选中此项,改用
setTextContent()。

并检查节点类型是否为
node.ELEMENT\u node

检查这个

   if (child.getNodeName().equals("name")) {

       child.setTextContent(name) ; 

   }