2016-05-13 76 views
0

我有從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> 

回答

0

這是一個有點難看,而不是最佳的巨大的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();