2 回答

TA贡献1812条经验 获得超5个赞
这应该有效。您可以使用 JAXB 进行解组。请阅读有关 JAXB 的信息。还要注意如何使用XmlElement和。XmlAttribute
String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<config>\n" +
" <server serverport=\"9966\"/>\n" +
" <client clientport=\"9999\">\n" +
" <serverHost>localhost</serverHost>\n" +
" </client>\n" +
"</config>";
JAXBContext jaxbContext;
try
{
jaxbContext = JAXBContext.newInstance(Config.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Config config = (Config) jaxbUnmarshaller.unmarshal(new StringReader(xmlString));
System.out.println(config);
}catch (JAXBException e){
e.printStackTrace();
}
配置类将是这样的
@XmlRootElement(name = "config")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Config {
public Server server;
public Client client;
public Config() {
}
public Server getServer() {
return server;
}
public void setServer(Server server) {
this.server = server;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
}
服务器类
public class Server {
@XmlAttribute(name = "serverport")
public String serverPort;
}
客户类
public class Client {
@XmlAttribute(name = "clientport")
public String clientPort;
@XmlElement
public String serverHost;
}

TA贡献1951条经验 获得超3个赞
该解决方案pvpkiran解决了一个问题,但我无法忍受 Jackson 无法将 XML 解析为单个对象的事实。调查带来了理想的效果,最终发现 我的 pom.XML 中有两个类似的依赖项,如jackson-databind和。jackson-xml-databind原来他们之间有矛盾。注释掉后jackson-xml-databind一切正常。
现在我的课程看起来像:
客户端类
@Getter
@NoArgsConstructor
@Setter
public class Client {
@JacksonXmlProperty(localName = "clientport")
private String clientPort;
@JacksonXmlProperty(localName = "serverHost")
private String serverHost;
}
服务器类
@AllArgsConstructor
@Getter
@NoArgsConstructor
@Setter
public class Server {
@JacksonXmlProperty(localName = "serverport")
private String serverPort;
}
配置类
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@JacksonXmlRootElement(localName = "config")
public class Config {
private Server server;
private Client client;
}
再次感谢您的承诺。
添加回答
举报