我有一个xsd架构
<xs:complexType name="valueType" mixed="true">
<xs:sequence>
<xs:element name="filename" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
和XML
<datapoint>
<fieldname>somestring</fieldname>
<value>some string</value>
</datapoint>
<datapoint>
<fieldname>somestring</fieldname>
<value>some string</value>
</datapoint>
<datapoint>
<fieldname>somestring</fieldname>
<value>
</filedata>
<filename>some string</filename>
</value>
</datapoint>
我使用了JAXB解析器并创建了一个类
public static class Value {
@XmlElementRef(name = "string", type = JAXBElement.class)
@XmlMixed
protected List<Serializable> content;
public List<Serializable> getContent() {
if (content == null) {
content = new ArrayList<Serializable>();
}
return this.content;
}
}
我能够在
时使用ValueObj.getContent()获取值 <datapoint>
<fieldname>somestring</fieldname>
<value>some string</value>
</datapoint>
但是我得到了一个文件名对象。
时如何从List中读取字符串 <datapoint>
<fieldname>somestring</fieldname>
<value>
<filename>some string</filename>
</value>
</datapoint>
我必须使用两个xsd或一个xsd吗?如何获取标签内部和标签内部的值。
答案 0 :(得分:0)
List<Serializable>
将包含用于纯文本部分的String
和用于XML元素的JAXBElement<?>
个对象。您可以使用JAXBElement.getName()
来检查元素的QName。如果您有复杂类型,则可以使用JAXBElement.getDeclaredType()
获取相应的java类型(由于Java类型擦除而从JAXBElement中删除)。