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

标签 java xml jaxb

我想附加一个 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/

相关文章:

java - 如何使用 Intent android studio打开whatsapp或whatsapp业务?

javascript - 如何获取XML的值

c# - XElement 中的 string.Format 未格式化

java - XSD:指定文本节点属性的名称

java - 在 WebView [Android Studio] [Java] 中允许麦克风访问(权限)

java - 使用 Spring Boot 显示的动态列数

java - Android Lollipop Material Design 溢出菜单图标颜色

xml - 第一个最后一个元素

web-services - 使用 CXF Web 服务进行服务器端 XML 验证

java - 我可以让 MOXy 在生成 json 时不输出属性吗?