我正在研究一个java项目,我需要从XML文件中读取一些对象,进行一些处理,这将改变对象的属性,然后将Object写入另一个XML文件.为此,我使用JAXB及其编组和解组功能,每个都在一个方法中,如下所示:
private MyObject unmarshallXMLFile(String file) {
MyObject t=null;
try {
jc = JAXBContext.newInstance("foo.bar");
Unmarshaller unmarshaller = jc.createUnmarshaller();
SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
unmarshaller.setSchema(sf.newSchema(new File("MySchema.xsd")));
t = (Task) unmarshaller.unmarshal(new File(file));
} catch (JAXBException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
return t;
}
private void marshallXMLFile(String file) {
task.setReplay(Boolean.TRUE);
Marshaller marshaller;
try {
marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, new Boolean(true));
marshaller.marshal(task, new FileOutputStream(file));
} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是自动生成的名称空间前缀(如ns2或ns3)一直出现在输出文件中,然后当我想使用unmarshallXMLFile方法重用这些文件时(我将在稍后再次使用输出文件作为输入)它不会得到根据模式进行验证,并抛出org.xml.sax.SAXParseException.这是我写的文件:
XML Schema:MySchema.xsd …