有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

  1. # 1 楼答案

    这有点难看,对于庞大的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();