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

时间:2016-05-13 19:49:40

标签: java xml jaxb jackson xmpp

我有一个从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>

1 个答案:

答案 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();