XML:
<data_format>
<data_length>15</data_length> <!-- -1 for unknown -->
<start_charater>$</start_charater>
<end_character1>B</end_character1>
<end_character2>E</end_character2>
<no_of_parameter>2</no_of_parameter>
<parameter>
<start_charater>A</start_charater>
<data_name>Azimuth</data_name>
<data_type>char</data_type>
<size>5</size>
</parameter>
<parameter>
<start_charater>R</start_charater>
<data_name>Range</data_name>
<data_type>char</data_type>
<size>5</size>
</parameter>
</data_format>
我应该如何将以XML编码的信息转换为可以包含此结构的类?我需要在运行时完成此操作。我从通过某个端口接收的数据包中获取方位角和范围的数据,并且需要一个结构来保存那些我不想硬编码的数据,但是想要在解析XML时在运行时生成它。这样做的目的是增加我的应用程序的通用性。
示例:
<!-- for this xml -->
<data>
<data_member name="name" type="String"></data_member>
<data_member name="id" type="int"></data_member>
</data>
我想要的Java类是:
class Data
{
private String name;
private int id;
public String getName()
{
return name;
}
public void setName(name)
{
this.name=name;
}
public int getId()
{
return id;
}
public void setId(id)
{
this.id=id;
}
}
答案 0 :(得分:2)
让您自己头疼:手动创建POJO,并使用JAXB将相关的XML文件处理到POJO实例中。有关示例和参考链接,请参阅this question。
答案 1 :(得分:0)
让我们从第二个XML示例开始,这个示例与第一个示例有很多不同......
这里又是(在编辑的情况下,我向XML添加了值):
<data>
<data_member name="name" type="String">foo</data_member>
<data_member name="id" type="int">42</data_member>
</data>
正如RealSkeptic在评论中提到的,您可以使用地图:
import java.util.HashMap;
import java.util.Map;
public class DataHolder {
private Map<String, Integer> ints = new HashMap<>();
private Map<String, String> strings = new HashMap<>();
public int getInt(String fieldName) {
return ints.get(fieldName);
}
public void setInt(String fieldName, int value) {
ints.put(fieldName, value);
}
public String getString(String fieldName) {
return strings.get(fieldName);
}
public void setString(String fieldName, String value) {
strings.put(fieldName, value);
}
}
我强烈建议只使用一些众所周知的类型:primitives + String似乎是合理的开始。不要使用Object,使用它总是很痛苦,在某些时候我需要将它转换为特定的东西。
但是如果我是你的API的用户,我会创建包装类以更方便的方式使用它:
public class DataHolderNameAndIdWrapper {
private DataHolder dataHolder;
public void setDataHolder(DataHolder dataHolder) {
this.dataHolder = dataHolder;
}
public String getName() {
return dataHolder.getString("name");
}
public void setName(String name) {
dataHolder.setString("name", name);
}
public Integer getId() {
return dataHolder.getInt("id");
}
public void setId(Integer id) {
dataHolder.setInt("id", id);
}
}
因为我作为消费者,我想知道我在做什么,而且我个人不同意你的评论“人们可以创建一个比编码更容易的XML”,如你所见,讨论时间更长,然后正确实施......
还有一些问题
虽然java区分大小写,但对于上面的用法我会将字段名称转换为小写。如果不存在,地图将返回空值。我再次返回空字符串""
或0。