JAXB - 如何在没有 XSD 的情况下解组 XML 其中包含没有包装器的列表
JAXB - How to unmarshall XML without XSD which contains lists without wrappers
我有一个必须解析的复杂 XML 文件,但我没有任何 XSD。 XML 看起来像这样(简化):
<?xml version="1.0" encoding="UTF-8"?>
<mets:mets ... namespace declaration ommited ... >
<mets:metsHdr>
complex mets:metsHdr
</mets:metsHdr>
<mets:dmdSec>
complex mets:dmdSec 1
</mets:dmdSec>
....
<mets:dmdSec>
complex mets:dmdSec n
</mets:dmdSec>
<mets:fileSec>
complex mets:fileSec 1
<mets:fileSec>
....
<mets:fileSec>
complex mets:fileSec n
<mets:fileSec>
</mets:mets>
有一个 header 元素,未包装的 dmdSec 列表和未包装的 fileSec 列表。我首先尝试阅读 mets:dmdSec 列表,使用这些 类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "mets")
public class Mets {
@XmlAttribute(name="TYPE")
private String type;
@XmlList
private List<DmdSec> dmdSec;
}
@XmlType
public class DmdSec {
@XmlAttribute(name="ID")
private String id;
}
但是我得到了这个例外:
线程 "main" javax.xml.bind.DataBindingException 中的异常:com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1 次 IllegalAnnotationExceptions
www.loc.gov.METS.DmdSec 映射到结构化的 XML 片段(也称为复杂类型),因此与 @XmlList 不兼容。
此问题与以下位置有关:
在私人 java.util.List www.loc.gov.METS.Mets.dmdSec
在 www.loc.gov.METS.Mets</p>
<pre><code>at javax.xml.bind.JAXB.unmarshal(Unknown Source)
就
@XmlElement(name="dmdSec")
private List<DmdSec> dmdSec;
应该做这些工作,而且你的 类 不匹配 xml,dmdSec 没有 id...
您还可以使用:http://www.freeformatter.com/xsd-generator.html#ad-output 生成架构,并从中生成 类 或者至少从中寻求灵感。
我有一个必须解析的复杂 XML 文件,但我没有任何 XSD。 XML 看起来像这样(简化):
<?xml version="1.0" encoding="UTF-8"?>
<mets:mets ... namespace declaration ommited ... >
<mets:metsHdr>
complex mets:metsHdr
</mets:metsHdr>
<mets:dmdSec>
complex mets:dmdSec 1
</mets:dmdSec>
....
<mets:dmdSec>
complex mets:dmdSec n
</mets:dmdSec>
<mets:fileSec>
complex mets:fileSec 1
<mets:fileSec>
....
<mets:fileSec>
complex mets:fileSec n
<mets:fileSec>
</mets:mets>
有一个 header 元素,未包装的 dmdSec 列表和未包装的 fileSec 列表。我首先尝试阅读 mets:dmdSec 列表,使用这些 类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "mets")
public class Mets {
@XmlAttribute(name="TYPE")
private String type;
@XmlList
private List<DmdSec> dmdSec;
}
@XmlType
public class DmdSec {
@XmlAttribute(name="ID")
private String id;
}
但是我得到了这个例外:
线程 "main" javax.xml.bind.DataBindingException 中的异常:com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1 次 IllegalAnnotationExceptions
www.loc.gov.METS.DmdSec 映射到结构化的 XML 片段(也称为复杂类型),因此与 @XmlList 不兼容。
此问题与以下位置有关:
在私人 java.util.List www.loc.gov.METS.Mets.dmdSec
在 www.loc.gov.METS.Mets</p>
<pre><code>at javax.xml.bind.JAXB.unmarshal(Unknown Source)
就
@XmlElement(name="dmdSec")
private List<DmdSec> dmdSec;
应该做这些工作,而且你的 类 不匹配 xml,dmdSec 没有 id...
您还可以使用:http://www.freeformatter.com/xsd-generator.html#ad-output 生成架构,并从中生成 类 或者至少从中寻求灵感。