将XML结构的一个子元素转换为Java对象

问题描述:

我有从XMPP订阅(下面)接收的消息的XML结构。我只关心此消息的“用户”部分,并希望将其转换为Java中等效的“用户”对象,以便我可以使用它来执行其他处理。有没有办法在Java中实现这一点?将XML结构的一个子元素转换为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> 

这是一个有点难看,而不是最佳的巨大的XML数据,但你可以从XML例如使用dom4j的,比用杰克逊来解析“只有用户XML”部分提取用户的一部分。

Document doc = new SAXReader().read(...); 
    Node user = doc.getRootElement() 
      .element("notification") 
      .element("Update") 
      .element("data") 
      .element("user"); 
    String onlyUserXml = user.asXML();