gpt4 book ai didi

java - 如何使用 JAXB 将 XML 字符串附加到现有的 XML 文件?

转载 作者:行者123 更新时间:2023-11-30 10:35:42 25 4
gpt4 key购买 nike

我想附加一个 String使用 JAXB 将 XML 元素表示为现有 XML 文件。

例如,我在单个 String 中有以下 XML变量:

<servername>aaaaaa</servername>
<ipaddress>121212121</ipaddress>
<port>8080</port>

我想把它包含在另一个 <server> 中我的 XML 中的标记。
我现有的 XML 文件包含以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<servers>
<server>
<servername>bbbbbb</servername>
<ipaddress>11.11.11.11</ipaddress>
<port>8080</port>
</server>
</servers>

我想添加 String 的内容此文件的变量,使其内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<servers>
<server>
<servername>bbbbbb</servername>
<ipaddress>11.11.11.11</ipaddress>
<port>8080</port>
</server>
<server>
<servername>aaaaaa</servername>
<ipaddress>121212121</ipaddress>
<port>8080</port>
</server>
</servers>

如何使用 JAXB 实现这一点?

最佳答案

最后我自己找到了答案

服务器.java

package com.tools;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "server")
public class Server {

private String servername;
private String ipaddress;
private int port;

public Server() {
}

public Server(String servername, String ipaddress, int port) {
super();
this.servername = servername;
this.ipaddress = ipaddress;
this.port = port;
}

@XmlElement
public String getServerName() {
return servername;
}

public void setServerName(String servername) {
this.servername = servername;
}

@XmlElement
public String getIpAddress() {
return ipaddress;
}

public void setIpAddress(String ipaddress) {
this.ipaddress = ipaddress;
}

@XmlElement
public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}

@Override
public String toString() {
return servername + " " + ipaddress + " " + port;
}
}

Servers.java

package com.tools;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement(name = "servers")
public class Servers {

private List<Server> servers;

public List<Server> getServers() {
return servers;
}

@XmlElement(name = "server")
public void setServers(List<Server> servers) {
this.servers = servers;
}

@Override
public String toString() {
return servers.toString();
}

}

主文件

package com.tools;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class ToolConfiguration {
public static void main(String args[])
{
String configFileName = "/config.xml";
File configFile = new File(ToolConfiguration.class.getResource(configFileName).getFile());
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Servers.class);
// Read XML
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Servers servers = (Servers) unmarshaller.unmarshal(configFile);

Server server = new Server("abv", "1.9.3.5", 8080);

List<Server> serversList = servers.getServers();
serversList.add(server);

servers.setServers(serversList);

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(servers, configFile);

/*List<Server> serversList = servers.getServers();
for (Server server : serversList) {
System.out.println(server.toString());
}*/

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

关于java - 如何使用 JAXB 将 XML 字符串附加到现有的 XML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971905/

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