首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对具有相同标记名的java中的嵌套子元素进行解封处理?

如何对具有相同标记名的java中的嵌套子元素进行解封处理?
EN

Stack Overflow用户
提问于 2017-01-26 14:35:15
回答 2查看 4.1K关注 0票数 4

在Java中,我可以通过将值添加到我的POJO中来读取XML。但我不知道如何才能对子节点进行同样的操作。我提供了POJO示例和XML子类节点。

XML:

代码语言:javascript
复制
<results>
    <rootNode>
        <node>1336</node>
        <state>CL</state>
        <time>0</time>
        <ip_addresses>
             <ip_address type="DOC">06:56:43.0</ip_address>
             <ip_address type="PE">06:56:43.0</ip_address>
        </ip_addresses>
        <lease_date>2017-01-25</lease_date>
    </rootNode>
</results>

POJO:

代码语言:javascript
复制
@XmlRootElement(name = "rootNode")
@XmlAccessorType (XmlAccessType.FIELD)
public class readingXml
{
    private int id;

    @XmlElement(name = "node")
    private String node;
    @XmlElement(name = "state")
    private String state;

    // How to do the same with sub child-nodes
    @XmlElement(name = "ip_addresses")
    private String ip_addresses;
    // What to do here?

    @XmlElement(name = "lease_date")
    private String lease_date;

    // Getters and setters for all above
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-26 14:52:52

你需要放这样的东西:

代码语言:javascript
复制
@XmlElement(name = "ip_addresses")
private IPAddresses ipAddresses;

和IPAddresses POJO类:

代码语言:javascript
复制
@XmlRootElement(name = "ip_addresses")
@XmlAccessorType(XmlAccessType.FIELD)
public class IPAddresses implements Serializable {
    private final static long serialVersionUID = 1L;

    @XmlElement(name = "ip_address")
    private List<IPAddress> ipAddresses;

    public List<IPAddress> getIpAddresses() {
        return ipAddresses;
    }
    public void setIpAddresses(List<IPAddress> ipAddresses) {
        this.ipAddresses = ipAddresses;
    }
}

其中IPAddress是另一个POJO类,它描述单个元素的结构。

代码语言:javascript
复制
@XmlRootElement(name = "ip_address")
@XmlAccessorType(XmlAccessType.FIELD)
public class IPAddress implements Serializable {
    private final static long serialVersionUID = 1L;
    @XmlValue
    protected String content;
    @XmlAttribute(name = "type")
    protected String type;

    public void setContent(String content) {
        this.content = content;
    }
    public String getContent() {
        return content;
    }

    public void setType(String content) {
        this.type = type;
    }
    public String getType() {
        return type;
    }
}

编辑以打印它们,执行如下操作:

代码语言:javascript
复制
for (IPAddress ipAddress in custinfo.getIpAddresses().getIpAddresses()) {
    System.out.println("value: " + ipAddress.getContent());
    System.out.println("type: " + ipAddress.getType());
}
票数 4
EN

Stack Overflow用户

发布于 2017-01-26 14:55:21

您可以将"ip_addresses“的类型从String更改为另一个POJO类。

例如。

代码语言:javascript
复制
   @XmlElement(name = "ip_addresses")
    private List<Address> ip_addresses;

然后将您的地址POJO定义为

代码语言:javascript
复制
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "ip_addresses")
public class Address {

    @XmlElement(type = "DOC")
    protected String ip_address1;

    @XmlElement(type = "PE")
    protected String ip_address2;

    public String getIp_address1() {
        return ip_address1;
    }

    public void setIp_address1(String value) {
        this.ip_address1= value;
    }

    public String getIp_address2() {
        return ip_address2;
    }

    public void setIp_address2(String value) {
        this.ip_address2= value;
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41875849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档