在 Xstrem 中另一个对象的上下文中解析 XML 个对象
Parse XML object in the context of another object in Xstrem
假设我有以下 XML:
<people>
<person name="John" id="1">...</person>
.....
<person name="Mark" id="3421">
<father references="1" />
</person>
</people>
并且我创建了以下 Xstream
对象:
XStream configXstream = new XStream(new StaxDriver());
configXstream.alias("people", People.class);
configXstream.alias("person", Person.class);
我已将现有 XML 解析为 People
对象。现在我想在运行时从 XML 添加一个人,并引用其在现有 People
对象中的父亲。例如,我想添加以下内容:
<person name="Peter" id="3459">
<father references="3421" />
</person>
现在我无法将 XML 解析为 person 对象,因为它表示对父亲的引用无效。
有没有办法告诉 xstream 在给定上下文的情况下解析对象(它应该从中解析引用的对象?)
记住 XStream 是基于流模型的。它从上到下处理 XML。因此可以添加向后引用(即对已经处理过的人),但根本无法解决前向引用。
我最终编写了一个自定义转换器,用于扫描人员列表中的给定 ID。为此,我扩展了 Converter
class 然后使用 xstream.registerConverter(new MyAwesomeCustomConverter)
.
注册了它
假设我有以下 XML:
<people>
<person name="John" id="1">...</person>
.....
<person name="Mark" id="3421">
<father references="1" />
</person>
</people>
并且我创建了以下 Xstream
对象:
XStream configXstream = new XStream(new StaxDriver());
configXstream.alias("people", People.class);
configXstream.alias("person", Person.class);
我已将现有 XML 解析为 People
对象。现在我想在运行时从 XML 添加一个人,并引用其在现有 People
对象中的父亲。例如,我想添加以下内容:
<person name="Peter" id="3459">
<father references="3421" />
</person>
现在我无法将 XML 解析为 person 对象,因为它表示对父亲的引用无效。
有没有办法告诉 xstream 在给定上下文的情况下解析对象(它应该从中解析引用的对象?)
记住 XStream 是基于流模型的。它从上到下处理 XML。因此可以添加向后引用(即对已经处理过的人),但根本无法解决前向引用。
我最终编写了一个自定义转换器,用于扫描人员列表中的给定 ID。为此,我扩展了 Converter
class 然后使用 xstream.registerConverter(new MyAwesomeCustomConverter)
.