我正在尝试将文本文件内容包含到xml文件中。我使用以下文件。我在bar属性上得到UnmarshalException。请指教。非常感谢。
thankyou.properties文件
Thank you
XML文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE doc [
<!ELEMENT bar (#PCDATA)>
<!ENTITY otherFile SYSTEM "thankyou.properties">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
我的XSD
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="doc">
<xs:complexType>
<xs:sequence>
<xs:element name="foo">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="bar"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Java模型
@XmlRootElement(name = "doc")
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
@XmlElement(name = "bar")
private String bar;
}
我得到的例外是
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"bar"). Expected elements are <{
答案 0 :(得分:0)
您遇到的异常是因为您的JAXB映射不正确。
试试这个:
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
@XmlElement(name = "bar")
private String bar;
}
@XmlRootElement(name = "doc")
@XmlAccessorType(XmlAccessType.FIELD)
public class Doc {
@XmlElement(name = "foo")
private Foo foo;
}
然后通过将Doc类绑定到您的JAXBContext来解组:
Unmarshaller um = JAXBContext.newInstance(Doc.class).createUnmarshaller();
Doc doc = um.unmarshall(yourFile);
此外,我不确定您是否能够按照您想要的方式添加文件。
解决方法是使用XmlAdapter和@XmlJavaTypeAdapter:将filePath提供给bar元素,然后使用适配器加载文件内容。