我有一个从XMPP订阅收到的消息的XML结构(如下)。我只关心此消息的“用户”部分,并希望将其转换为Java中的等效“用户”对象,以便我可以使用它来执行其他处理。有没有办法在Java中实现这一目标?
我知道我能做到的唯一方法是使用Jackson注释(例如@JsonProperty)并为所有父元素创建等效对象 - 事件,通知,更新,数据等 - 但我并不关心他们似乎是浪费。
不确定如何将“用户”部分转换为对象并忘记其余部分?
<event xmlns='http://jabber.org/protocol/pubsub#event'>
<notification xmlns='http://jabber.org/protocol/pubsub'>
<Update>
<data>
<user>
<dialogs>/finesse/api/User/1234/Dialogs</dialogs>
<extension></extension>
<firstName>1234</firstName>
<lastName>1234</lastName>
<loginId>1234</loginId>
<loginName>1234</loginName>
<roles>
<role>Agent</role>
</roles>
<state>LOGOUT</state>
<stateChangeTime>2015-03-11T14:25:42Z</stateChangeTime>
<teamId>1</teamId>
<teamName>Default</teamName>
<uri>/finesse/api/User/1234</uri>
</user>
</data>
</Update>
</notification>
</event>
答案 0 :(得分:0)
对于大量的xml数据来说,它有点难看并且不是最佳的,但是您可以使用例如dom4j从xml中提取用户部分,而不是使用Jackson来解析“仅用户xml”部分。
Document doc = new SAXReader().read(...);
Node user = doc.getRootElement()
.element("notification")
.element("Update")
.element("data")
.element("user");
String onlyUserXml = user.asXML();