JAXB XML动态解组

问题描述 投票:1回答:1

所以我有几个要解组的XML。

一个XML可能看起来像这样:

<TABLE>
    <RECORDS>
        <RECORD>
            <DOC_ID>some value</DOC_ID>
            <ENTITY_ID>some value</ENTITY_ID>
            ...more entries
        </RECORD>
        <RECORD>
            <DOC_ID>some value</DOC_ID>
            <ENTITY_ID>some value</ENTITY_ID>
            ...more entries
        </RECORD>
    </RECORDS>
</TABLE>

另一个XML也可能看起来像这样:

<TABLE>
    <RECORDS>
        <RECORD>
            <SUB_ID>some value</SUB_ID>
            <CASE_DOC_ID>some value</CASE_DOC_ID>
            ...more entries
        </RECORD>
        <RECORD>
            <SUB_ID>some value</SUB_ID>
            <CASE_DOC_ID>some value</CASE_DOC_ID>
            ...more entries
        </RECORD>
    </RECORDS>
</TABLE>

每个XML始终以TABLE为根,RECORDS作为子级,RECORD作为孙级,只是RECORD中的数据不同。

我不想要封送任何东西,只是封送并获取数据。

在我的表类中]

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "TABLE")
public class Table {

    @XmlJavaTypeAdapter(MapAdapter.class)
    private Map<String, String> RECORDS;

    public Map<String, String> getMap() {
        return RECORDS;
    }

    public void setMap(Map<String, String> record) {
        this.RECORDS = record;
    }

}

我从此链接中获取了MapAdapter:JAXB Marshal and Unmarshal Map to/from <key>value</key>

我的问题是这样的:我希望能够获得记录中的每个标签名称(DOC_ID / SUB_ID或XML中的任何名称),并且当我传递XML时,它的每个值都为字符串,但我不确定该如何处理。] >

向我指出正确方向的任何帮助将不胜感激。

编辑:

2个新问题!我意识到我可能需要所有记录的地图列表。

  • 我设法通过上面的Table类获得了最后一条记录的键和值。如何将其转换为地图列表,以便获取每条记录,而不仅仅是最后一条?
  • [另一个问题是,Table类仅在我的xml中没有RECORDS标记时才起作用。我该如何解决?
  • 因此,我有两个要解组的XML。一个XML可能看起来像这样:

    [[某些值 ...] >>

    您需要能够使用您提供的Map中的MapAdapter来注释link,因此您需要创建一个子类。

    @XmlJavaTypeAdapter(MapAdapter.class)
    public class Record extends HashMap<String, String> {
    }
    

    然后,您的Table类非常简单,尽管您需要使用@XmlElementWrapper进行注释才能获得额外的XML级别。

java xml jaxb unmarshalling
1个回答
0
投票

您需要能够使用您提供的Map中的MapAdapter来注释link,因此您需要创建一个子类。

© www.soinside.com 2019 - 2024. All rights reserved.