gpt4 book ai didi

java - JAXB 和列出可通过键访问的属性

转载 作者:行者123 更新时间:2023-12-01 15:57:46 25 4
gpt4 key购买 nike

使用 JAXB 如何将此文档解码到对象模型中,以便我可以通过手机号码查询用户名?

<Details>
<Mobile>
<Username>Rahul</Username>
<MobileNumber>7539518520</MobileNumber>
</Mobile>
<Mobile>
<Username>Rahul</Username>
<MobileNumber>1234567890</MobileNumber>
</Mobile>
<Mobile>
<Username>Kumar</Username>
<MobileNumber>7894561230</MobileNumber>
</Mobile>
</Details>

最佳答案

为此,我将利用 unmarshal 事件将移动对象列表中的信息存储在 map 中。

您的域模型将如下所示:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Details")
@XmlAccessorType(XmlAccessType.NONE)
public class Details {

private Map<String, String> mobileNumberToUsername;

@XmlElement(name="Mobile")
private List<Mobile> mobileList;

public Details() {
mobileNumberToUsername = new HashMap<String, String>();
}

public String getUsername(String mobileNumber) {
return mobileNumberToUsername.get(mobileNumber);
}

void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
for(Mobile mobile : mobileList) {
mobileNumberToUsername.put(mobile.getMobileNumber(), mobile.getUsername());
}
}

}

和:

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

@XmlType(propOrder={"username", "mobileNumber"})
public class Mobile {

private String username;
private String mobileNumber;

@XmlElement(name="Username")
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@XmlElement(name="MobileNumber")
public String getMobileNumber() {
return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}

}

您可以使用 XML 文档和以下演示代码来测试此映射:

import java.io.File;

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

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Details.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum121/input.xml");
Details details = (Details) unmarshaller.unmarshal(xml);

System.out.println(details.getUsername("1234567890"));

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(details, System.out);
}

}

关于java - JAXB 和列出可通过键访问的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4758162/

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