And*_*kas 3 java xml xml-parsing spring-boot
我有一个 XML 文件,其中存储了国家/地区。每个国家/地区元素都具有区域、次区域、国家/地区代码等属性。我的服务应该解析 XML 并根据提供的国家/地区名称获取区域。有没有什么方法可以将 xml 中的数据加载到内存中并使用,这样我就不需要每次想要获取国家/地区的区域时都解析 XML?我不想使用枚举,因为我想要可更新的 xml 列表,该列表仅在应用程序启动时或第一次使用我的服务时解析一次。因此,在 XML 更新之后,服务器重新启动就足够了,无需重建应用程序来更新枚举。如何才能实现这一目标?
@chrylis 建议这样做 - 我碰巧有一个类似的解决方案,很容易复制/粘贴到工作示例中。
如果您的 XML 如下所示:
<countries>
<country name="England" region="Europe"
subregion="Western Europe" countryCode="eng" />
<country name="Scotland" region="Europe"
subregion="West Europe" countryCode="sco" />
</countries>
Run Code Online (Sandbox Code Playgroud)
你有Country这样的类型:
public class Country {
private String name;
private String region;
private String subregion;
private String countryCode;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
然后将以下依赖项添加到您的项目中:
com.fasterxml.jackson.dataformat:jackson-dataformat-xml
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这段代码:
public class JacksonXml {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
InputStream is = JacksonXml.class.getResourceAsStream("/countries.xml");
XmlMapper xmlMapper = new XmlMapper();
List<Country> countries = xmlMapper.readValue(is, new TypeReference<List<Country>>() {
});
Map<String, Country> nameToCountry = countries.stream()
.collect(Collectors.toMap(Country::getName, Function.identity()));
System.out.println(nameToCountry.get("England")
.getRegion());
}
}
Run Code Online (Sandbox Code Playgroud)
将产生:
Europe
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13509 次 |
| 最近记录: |