Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用相同的标记名在java中解组嵌套的子元素?_Java_Xml_Spring Boot - Fatal编程技术网

如何使用相同的标记名在java中解组嵌套的子元素?

如何使用相同的标记名在java中解组嵌套的子元素?,java,xml,spring-boot,Java,Xml,Spring Boot,在Java中,我可以通过将值添加到POJO中来读取XML。但我不确定如何对子节点执行同样的操作。我提供了POJO示例和XML子类节点 XML: <results> <rootNode> <node>1336</node> <state>CL</state> <time>0</time> <ip_addresses>

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

XML:

<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>
@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

你需要这样写:

@XmlElement(name = "ip_addresses")
private IPAddresses ipAddresses;
for (IPAddress ipAddress in custinfo.getIpAddresses().getIpAddresses()) {
    System.out.println("value: " + ipAddress.getContent());
    System.out.println("type: " + ipAddress.getType());
}
和IP地址POJO类:

@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;
    }
}
编辑 要打印它们,请执行以下操作:

@XmlElement(name = "ip_addresses")
private IPAddresses ipAddresses;
for (IPAddress ipAddress in custinfo.getIpAddresses().getIpAddresses()) {
    System.out.println("value: " + ipAddress.getContent());
    System.out.println("type: " + ipAddress.getType());
}

您可以将“ip_地址”的类型从字符串更改为另一个POJO类

例如


我在@xmlement(Type=“PE”)上得到一个“类型不匹配:无法从字符串转换为类”和“DOC”在主pojo上定义字段顺序
@XmlType(name=“readingXml”,propOrder={“node”,“state”,“ip_addresses”}
我已经在我的主POJO中添加了它。我还收到“Address无法解析为类型”在我的主POJO中,当我将下面的代码添加到我的主POJO中时,例如;我按照您的步骤操作。它不起作用。当我返回IPAddress时,我收到一个奇怪的文本,如root.project.model[GFG3343]你的意思是当你反序列化时?你所说的返回是什么意思?你能显示完整的错误吗?嗯…我可以从XML中提取我的值,比如节点,状态…等等,它将返回1336,CL。但是我不能提取ip_地址,它是空的。我实现了你的方法。但是我仍然没有收到两个ip地址。我忘记为字符串值添加内容了。你能试试吗?查看我的更新答案我仍然收到一个数组文本作为响应。我如何才能将我在IPAdress POJO中设置的值获取到主POJO中,在主POJO中我可以打印这些值?在我的帖子中添加了你的方法。Serge答案似乎正确。我不明白你看到更新时遇到了什么问题,但它让人困惑,是吗使用Serge的IPAddress类?我想他只是在使用带包装器的字符串列表,对吗now@serge是的,可能吧。我要删除我的更新,然后开始一篇新的帖子。Serge从技术上回答了我最初的问题。
@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;
    }

}