gpt4 book ai didi

java - 如何使用用户输入将另一个 XML 元素添加到预先存在的文件中?

转载 作者:行者123 更新时间:2023-12-01 11:37:21 25 4
gpt4 key购买 nike

我有一个程序,可以为音乐库创建一个 XML 文件,其中包含不同的元素,例如艺术家、专辑等。我对一个条目进行了硬编码:

        //Root elements
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("Albums");
doc.appendChild(rootElement);

//Album elements
Element album = doc.createElement("Album");
rootElement.appendChild(album);

//Set attribute to album element
Attr attr = doc.createAttribute("ID");
attr.setValue("1");
album.setAttributeNode(attr);

//Title elements
Element title = doc.createElement("Title");
title.appendChild(doc.createTextNode("A Weekend in the City"));
album.appendChild(title);

//Artist elements
Element artist = doc.createElement("Artist");
artist.appendChild(doc.createTextNode("Bloc Party"));
album.appendChild(artist);

//Year elements
Element year = doc.createElement("Year");
year.appendChild(doc.createTextNode("2007"));
album.appendChild(year);

但我希望程序询问用户是否要向 XML 文件添加更多记录,这是我目前所拥有的:

        if ((input.equals("Y")) || (input.equals("y")))
{
System.out.println("How many records would you like to add?");
String userInput = scanner.next();
int numRecords=Integer.parseInt(userInput);

for (int i=0; i<numRecords; i++)
{
System.out.println("Enter the name of the album");
String getTitle = scanner.nextLine();
album.appendChild(doc.createTextNode(getTitle));
album.appendChild(title);
System.out.println("Enter the name of the artist");
String getArtist = scanner.nextLine();
artist.appendChild(doc.createTextNode(getArtist));
album.appendChild(artist);
System.out.println("Enter the year the album was released");
String getYear = scanner.nextLine();
artist.appendChild(doc.createTextNode(getYear));
album.appendChild(year);

} //End for loop

但是,这只会将用户输入附加到现有记录,而不是创建新记录。我问的可以吗?

抱歉,如果此类问题已经得到解答,但在任何地方都找不到类似的问题!提前致谢。

最佳答案

听起来您想要多个 <Album>元素,但您的程序仅创建 1 <Album>您硬编码的元素,然后将用户输入的标题、艺术家、年份元素附加到单个 <Album> 中元素?

问题是您要附加到 <Album>而不是<Albums>在 for 循环中使用这一行:

album.appendChild(doc.createTextNode(getTitle));

您不需要在现有相册变量上调用appendChild,而是需要创建一个新的相册变量并将其附加到rootElement。

因为您将使用完全相同的代码来附加 <Album>正如您对硬编码元素所做的那样,我建议创建一种方法来避免编写重复的代码,例如:

private void appendAlbum(Element rootElement, String titleStr, String id, String artistStr, String yearStr) {
Element album = doc.createElement("Album");
rootElement.appendChild(album);

//Set attribute to album element
Attr attr = doc.createAttribute("ID");
attr.setValue(id);
album.setAttributeNode(attr);

//Title elements
Element title = doc.createElement("Title");
title.appendChild(doc.createTextNode(titleStr));
album.appendChild(title);

//Artist elements
Element artist = doc.createElement("Artist");
artist.appendChild(doc.createTextNode(artistStr));
album.appendChild(artist);

//Year elements
Element year = doc.createElement("Year");
year.appendChild(doc.createTextNode(yearStr));
album.appendChild(year);
}

rootElement 参数是 <Albums>您在硬编码版本中创建的元素。

您也可以为您的硬编码版本调用此方法:

appendAlbum(rootElement, "A Weekend in the City", "1", "Bloc Party", "2007")

顺便说一句,您可以通过使用 equalsIgnoreCase() 方法检查用户输入来稍微简化您的程序,而不是检查大小写 Y。

input.equalsIgnoreCase("y")

关于java - 如何使用用户输入将另一个 XML 元素添加到预先存在的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com