【发布时间】:2017-12-24 21:47:23
【问题描述】:
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;
}
}
【问题讨论】:
-
你能添加一个你想要动态创建的类定义吗?但恐怕你不能说“我想要用字段 a、b 和 c 扩展 Object 的新类 DataHolder”这样的话。请更好地说明您想要实现的目标...
-
找到this,但不确定它有什么帮助。您的其余代码如何知道如何调用这个动态生成的类的方法?请添加更多上下文并详细描述用例。
-
我认为你在这里走错了方向。您要求的东西非常困难且不是很有用。而且仍然不清楚您将如何知道您需要访问的 getter 和 setter 的名称。如果您以某种方式知道 XML 中的名称,您可能会使用某种
Map。为什么需要上课? -
这听起来很像XY problem。现在我们知道您想要更改 XML 文档的某些部分,我们可以解决那个问题。很可能,您只想简单地导航 XML Document,或者,如果 XML 非常大,请使用 XSLT 到 transform。
-
即使你使用反射,你怎么知道调用哪些方法呢?您如何知道 get-methods 返回什么数据,或者将什么数据传递给 set-method?我认为你的设计有缺陷。您无法合理地告诉人们“发送您想要的任何东西,我会弄清楚的。”你需要定义一个特定的结构,你需要要求其他人遵守它。这就是存在公共方法的原因。这就是 XML 模式存在的原因。如果没有明确定义的通信合同,您最多只能进行不可靠、不可靠的猜测。