XmlMapper:读取 XML 值而不为创建的对象分配 class
XmlMapper: read XML values without assigning a class for the created objects
我正在尝试为我的项目实现多语言界面,为此我想从 XML 文件中加载 3 种语言的数据。问题是,当我想读取值时,我只能使用 readValue(file,MyClass.class) 来完成,我不想这样做,因为我想直接将数据提取到设置并迭代它,而不是进入一个对象。
例如,在 XML 文件中,我想直接提取带有“english”的字段,然后遍历其值。我可以对“罗马尼亚语”或“德语”做同样的事情。我发现为每个 window 创建一个新的 class 是没有用的...有没有办法直接提取每种语言并迭代其元素?
这是我的 XML 代码:
<?xml version="1.0" encoding="utf-8"?>
<langauges>
<romanian>
<flight_number>Numar zbor:</flight_number>
<depart_airport>Aeroport plecare:</depart_airport>
<destination>Destinatie:</destination>
<flight_time>Timpul de zbor:</flight_time>
<username>Utilizator:</username>
<password>Parola:</password>
<login>Log In</login>
<search_depart_destination_time>Cautare dupa aeroport de plecare/destinatie si timp</search_depart_destination_time>
<see_price_free_seats_2_locations>Vezi preturi si locuri libere intre 2 locatii</see_price_free_seats_2_locations>
<search_after_flight_number>Cauta dupa numarul zborului</search_after_flight_number>
</romanian>
<english>
<flight_number>Flight number:</flight_number>
<depart_airport>Depart airport:</depart_airport>
<destination>Destination:</destination>
<flight_time>Flight time:</flight_time>
<username>Username:</username>
<password>Password:</password>
<login>Log In</login>
<search_depart_destination_time>Search after depart/destination airport and time</search_depart_destination_time>
<see_price_free_seats_2_locations>See price and free seats between 2 locations</see_price_free_seats_2_locations>
<search_after_flight_number>Search after flight number</search_after_flight_number>
</english>
<german>
<flight_number>Flug Nummer:</flight_number>
<depart_airport>Abflug flughafen:</depart_airport>
<destination>Bestimmungsort:</destination>
<flight_time>Flugzeit:</flight_time>
<username>Nutzername:</username>
<password>Passwort:</password>
<login>Anmeldung</login>
<search_depart_destination_time>Suchen zwischen abflug/bestimmungsort und zeit</search_depart_destination_time>
<see_price_free_seats_2_locations>Sehen preis und frei plaetze zwischen 2 oerten</see_price_free_seats_2_locations>
<search_after_flight_number>Suchen ueber Flug nummer</search_after_flight_number>
</german>
</langauges>
这里,我做的Java方法不成功:
XmlMapper xmlMapper = new XmlMapper();
File file = new File("languages.xml");
String xml = Files.readString(file.toPath());
String s = xmlMapper.readValue(xml, String.class);
我认为您可能想要一个可动态更改的可迭代结构,而无需更改您的 class。在这种情况下,我建议使用地图。
Map<String, Map<String, String>>xmlMap = xmlMapper.readValue(xml, new TypeReference<Map<String, Map<String, String>>>() {});
或者干脆
Map<String, Map<String, String>>xmlMap = xmlMapper.readValue(xml, Map.class);
但我更喜欢前一个,因为它更干净。
然后你可以这样称呼他们
String password = xmlMap.get("german").get("password");
System.out.println(password);
在 JavaScript 等其他编程语言中,对象只是一张地图,可以毫不费力地动态更改。
我正在考虑的一个场景是有一个包含语言的下拉菜单,在你选择它之后,你可以遍历该语言中的元素,也许你有一种语言需要更多或更少的字段,在这种情况下,Map是一个不错的选择。
希望对您有所帮助!
我正在尝试为我的项目实现多语言界面,为此我想从 XML 文件中加载 3 种语言的数据。问题是,当我想读取值时,我只能使用 readValue(file,MyClass.class) 来完成,我不想这样做,因为我想直接将数据提取到设置并迭代它,而不是进入一个对象。 例如,在 XML 文件中,我想直接提取带有“english”的字段,然后遍历其值。我可以对“罗马尼亚语”或“德语”做同样的事情。我发现为每个 window 创建一个新的 class 是没有用的...有没有办法直接提取每种语言并迭代其元素?
这是我的 XML 代码:
<?xml version="1.0" encoding="utf-8"?>
<langauges>
<romanian>
<flight_number>Numar zbor:</flight_number>
<depart_airport>Aeroport plecare:</depart_airport>
<destination>Destinatie:</destination>
<flight_time>Timpul de zbor:</flight_time>
<username>Utilizator:</username>
<password>Parola:</password>
<login>Log In</login>
<search_depart_destination_time>Cautare dupa aeroport de plecare/destinatie si timp</search_depart_destination_time>
<see_price_free_seats_2_locations>Vezi preturi si locuri libere intre 2 locatii</see_price_free_seats_2_locations>
<search_after_flight_number>Cauta dupa numarul zborului</search_after_flight_number>
</romanian>
<english>
<flight_number>Flight number:</flight_number>
<depart_airport>Depart airport:</depart_airport>
<destination>Destination:</destination>
<flight_time>Flight time:</flight_time>
<username>Username:</username>
<password>Password:</password>
<login>Log In</login>
<search_depart_destination_time>Search after depart/destination airport and time</search_depart_destination_time>
<see_price_free_seats_2_locations>See price and free seats between 2 locations</see_price_free_seats_2_locations>
<search_after_flight_number>Search after flight number</search_after_flight_number>
</english>
<german>
<flight_number>Flug Nummer:</flight_number>
<depart_airport>Abflug flughafen:</depart_airport>
<destination>Bestimmungsort:</destination>
<flight_time>Flugzeit:</flight_time>
<username>Nutzername:</username>
<password>Passwort:</password>
<login>Anmeldung</login>
<search_depart_destination_time>Suchen zwischen abflug/bestimmungsort und zeit</search_depart_destination_time>
<see_price_free_seats_2_locations>Sehen preis und frei plaetze zwischen 2 oerten</see_price_free_seats_2_locations>
<search_after_flight_number>Suchen ueber Flug nummer</search_after_flight_number>
</german>
</langauges>
这里,我做的Java方法不成功:
XmlMapper xmlMapper = new XmlMapper();
File file = new File("languages.xml");
String xml = Files.readString(file.toPath());
String s = xmlMapper.readValue(xml, String.class);
我认为您可能想要一个可动态更改的可迭代结构,而无需更改您的 class。在这种情况下,我建议使用地图。
Map<String, Map<String, String>>xmlMap = xmlMapper.readValue(xml, new TypeReference<Map<String, Map<String, String>>>() {});
或者干脆
Map<String, Map<String, String>>xmlMap = xmlMapper.readValue(xml, Map.class);
但我更喜欢前一个,因为它更干净。 然后你可以这样称呼他们
String password = xmlMap.get("german").get("password");
System.out.println(password);
在 JavaScript 等其他编程语言中,对象只是一张地图,可以毫不费力地动态更改。
我正在考虑的一个场景是有一个包含语言的下拉菜单,在你选择它之后,你可以遍历该语言中的元素,也许你有一种语言需要更多或更少的字段,在这种情况下,Map是一个不错的选择。
希望对您有所帮助!