我有以下xml
<root>
<child-1>
</child-1>
<child-2>
<subchild-21>
</subchild-22>
</child-2>
</root>
我的要求是我只想解析child-2。我不知道root和child-1。
是否可以使用xstream,因为我找不到忽略root的方法。
答案 0 :(得分:1)
根据您的要求,有几种方法可以使用。
如果你知道要解析的类的名称(这里是child-2),你可以在XML中查找<child-2>
和</child-2>
条目,将它们与中间的内容一起复制到一个新的临时XML文件(您可以使用标准File类中的createTempFile()创建临时文件)。这就是我建议的方式。
如果你想在不知道名字的情况下取出child-2实例,但你知道周围类的名称,你可以模拟他们的类,即创建同名的类,但没有他们的特定内容。在您的示例中没有内容(可能在导出时被忽略),但在模拟类中使用相同的成员数据以使导入成功非常重要。 (除非您使用Philipi Willemann所述的ignoreUnknownElements()
)
当然,如果您是创建XML的人,那么您应该首先只能导出子2实例。
答案 1 :(得分:0)
如果您知道根名称,则可以创建一个简单类,其中包含已映射到child-2
的类的属性:
@XStreamAlias("root")
class Root {
@XStreamAlias("child-2")
private Child2 child;
//get and set
}
然后,在处理XML时,您可以将XStream设置为忽略xstream.ignoreUnknownElements();