用java实现XML映射

用java实现XML映射,java,xml,mapping,Java,Xml,Mapping,我有以下XML: <?xml version="1.0" encoding="utf-16"?> <ROOT> <fieldset> <field Id="c0" Name="_ID_VERSION" DataType="int"/> <field Id="c1" Name="_TYPE" DataType="string"/> <field Id="c2" Name="_P

我有以下XML:

<?xml version="1.0" encoding="utf-16"?>
<ROOT>
    <fieldset>
        <field Id="c0" Name="_ID_VERSION" DataType="int"/>
        <field Id="c1" Name="_TYPE" DataType="string"/>
        <field Id="c2" Name="_PRODUCT" DataType="string"/>
        <field Id="c3" Name="_VERSION" DataType="string"/>
        <field Id="c4" Name="_REVISION" DataType="int"/>
        <field Id="c5" Name="_STATE" DataType="string"/>
        <field Id="c6" Name="_DOCUMENT" DataType="int"/>
        <field Id="c7" Name="_HAS_LINK" DataType="int"/>
        <field Id="c8" Name="_LOCKED" DataType="int"/>
        <field Id="c9" Name="_ACCESSLEVEL" DataType="int"/>
        <field Id="c10" Name="_LABEL" DataType="int"/>
        <field Id="c11" Name="_LABEL_NAME" DataType="string"/>
    </fieldset>
    <rowset>
        <row c0="2932" c1="" c2="{3FDAC10D-5361-4C32-B79E-D391DCB3AE98}" c3="" c4="0" c5="" c6="0" c7="1" c8="0" c9="3" c10="-1" c11=""/>
        <row c0="3146" c1="0" c2="MyProject" c3="" c4="0" c5="" c6="0" c7="1" c8="1" c9="3" c10="-1" c11=""/>
        <row c0="3147" c1="" c2="tes" c3="" c4="0" c5="" c6="0" c7="1" c8="0" c9="3" c10="-1" c11=""/>
        <row c0="2933" c1="" c2="" c3="" c4="0" c5="" c6="0" c7="1" c8="0" c9="3" c10="-1" c11=""/>
        <row c0="3048" c1="" c2="" c3="" c4="0" c5="" c6="0" c7="1" c8="0" c9="3" c10="-1" c11=""/>
    </rowset>
</ROOT>

但是我想自动地去做。

这个问题可能会碰到大多数离题的问题推荐工具、基于意见、迄今为止你尝试过的东西等等。但是,嘿,不管怎样。:)

这里有一个我喜欢的基于观点的工具推荐,即

编写并注释您的POJO:

@XmlRootElement(name="ROOT")
public class Dataset {

  @XmlElementWrapper(name="fieldset")
  @XmlElement(name="field")
  public List<Field> fields = new LinkedList<Field>();

  @XmlElementWrapper(name="rowset")
  @XmlElement(name="row")
  public List<Row> rows = new LinkedList<Row>();

}

public class Field {
  @XmlElement(name="Id")
  public String id;
  @XmlElement(name="Name")
  public String name;
  @XmlElement(name="DataType")
  public String dataType;
}

public class Row {
  @XmlAnyElement
  public Map<QName, String> columns = new HashMap<QName, String>();
}
JAXB中的“解析”称为“解组:

final Unmarshaller = contect.createUnmarshaller();
final Dataset dataset = (Dataset) unmarshaller.unmarshal(source);
我只是在这里草拟了代码,所以这可能从一开始就不起作用,但你明白了

我也不确定这些是不是你想要的POJO,但这可能是一个好的开始


除了JAXB,您可能还可以使用几十个其他库来完成此任务。请不要将JAXB作为唯一的答案,同时检查备选方案。

此:
看起来不是有效的XML。抱歉,XML美化错误编码。您的pojo应该是什么样子?您有架构吗?是否要获取具有属性的内容
idVersion
type
product
等或
字段集
行集
等?不是,我没有架构文件。是的,它是从programm中输出的API。我想将其转换为pogo,以便在下一步使用它。谢谢!这对我很有帮助!
final JAXBContext context = JAXBContext.newInstance(Dataset.class);
final Unmarshaller = contect.createUnmarshaller();
final Dataset dataset = (Dataset) unmarshaller.unmarshal(source);