是否可以使用JAXB基于某些属性值获取XML元素?

时间:2014-07-09 19:27:52

标签: java xml xml-parsing jaxb

我使用名为Height.xml的JAXB创建了一个XML文件。结构如下所示。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<heightList>
    <measurement id="5">
        <height>4'4"</height>
    </measurement>
    <measurement id="4">
        <height>4'3"</height>
    </measurement>
    <measurement id="3">
        <height>4'2"</height>
    </measurement>
    <measurement id="2">
        <height>4'1"</height>
    </measurement>
    <measurement id="1">
        <height>4'0"</height>
    </measurement>
</heightList>

可以将此XML文件解组为List<Height>,如下所示。

JAXBContext jaxb=JAXBContext.newInstance(HeightList.class);
File file=new File("Height.xml");
List<Height> heightList = ((HeightList) jaxb.createUnmarshaller().unmarshal(file)).getList();

是否可以根据其属性id获取XML元素,以便只提取List<Height>类型的Height而不是idpublic final class Height implements Serializable { private Integer id; private String height; private static final long serialVersionUID = 1L; public Height() {} @XmlAttribute(name = "id") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } } 属性是唯一的。


相关课程:

高度:

@XmlRootElement(name = "heightList")
@XmlAccessorType(XmlAccessType.PROPERTY)
public final class HeightList implements Serializable
{
    @XmlElement(name="measurement")
    private List<Height>list;
    private static final long serialVersionUID = 1L;

    public HeightList() {}

    public HeightList(List<Height> list) {
        this.list = list;
    }

    public List<Height> getList() {
        return list;
    }
}

HeightList:

{{1}}

1 个答案:

答案 0 :(得分:1)

您有一个List heightList,您可以从文档/对象树中检索,而无需任何额外开销 - 它是该树的一部分。部分解组没有完成。

使用特定ID值找到高度:

Height getById( List<Height> list, Integer id ){
    for( Height h: list ){
        if( h.getId().equals(id) ) return h;
    }
    return null;
}

可能值得考虑像XSLT这样的东西将XML文档缩减为包含单个<mesurement>并解组的文档。

除非名单很长,否则可能不值得。