使用JAXB解组的XML到Java

使用JAXB解组的XML到Java,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我使用下面的代码将XML解组为一组Java类(由xsd生成的类) 如何解决此问题?如果使用了test前缀,则XML文档中应该有xmlns:test属性。如果没有声明前缀的属性,则应该从文档中删除前缀,使其有效 更新 我无法控制文件,所以我想我必须找到一些 删除test:prefix和xsi:before的变通方法 解编 下面是一个链接到一个示例,该示例将帮助您构建所需的内容。它利用JAXB的解组器handler和SAX解析器将前缀视为元素名称的父元素 文档中没有这样的xmls:test属性

我使用下面的代码将XML解组为一组Java类(由xsd生成的类)


如何解决此问题?

如果使用了
test
前缀,则XML文档中应该有
xmlns:test
属性。如果没有声明前缀的属性,则应该从文档中删除前缀,使其有效


更新
我无法控制文件,所以我想我必须找到一些 删除test:prefix和xsi:before的变通方法 解编

下面是一个链接到一个示例,该示例将帮助您构建所需的内容。它利用JAXB的
解组器handler
和SAX解析器将前缀视为元素名称的父元素


文档中没有这样的xmls:test属性。@Sergiu-文档无效。您是否控制文档以便修复它?如果没有解决方法,前缀是否总是相同的?我不控制文档,因此我想在解组之前,我必须找到一些解决方法来删除test:prefix和xsi:。@Sergiu-我已经更新了我的答案,并提供了一个链接,链接到一个可能有助于解决方法的示例。
JAXBContext jc = JAXBContext.newInstance(BlockType.class);
StreamSource xml = new StreamSource("C:\\Users\\Se\\Desktop\\watch2.xml");
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<BlockType> je1 = unmarshaller.unmarshal(xml, BlockType.class);

BlockType cgwt = je1.getValue();
<test:MessageBlock xsi:schemaLocation="http://www.test.com/Watch/v2.1 Test_WatchSchema_v2.1.xsd">
[org.xml.sax.SAXParseException: The prefix "test" for element "test:CargoWatchMessageBlock" is not bound.]