UnmarshalException 错误

UnmarshalException error

我正在尝试解组我的 DOM 已解析文档,以便我可以更新我的 XML。但我收到以下命名空间错误:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"Showing_Today"). Expected elements are <{http://xml.netbeans.org/schema/Shows}Showing_Today>

这是我的:包-info.java

@javax.xml.bind.annotation.XmlSchema
(namespace = "http://xml.netbeans.org/schema/Shows", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package Media;

这是我要解组的 XML 文件

  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
 <Showing_Today xmlns="http://xml.netbeans.org/schema/Shows">
 <movie_collection>
  <Title>Red</Title> 
  <Director>Robert Schwentke</Director> 
  <Year>2010</Year> 
  </movie_collection>

ShowingToday.java

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "movieCollection"
})
@XmlRootElement(name = "Showing_Today")
public class ShowingToday {

    @XmlElement(name = "movie_collection")
    protected List<MovieType> movieCollection;

这是我的解组器代码:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document domDoc = docBuilder.parse("Now_Showing.xml");
dbf.setNamespaceAware(true);

JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(ShowingToday.class);
Binder <Node> binder = jaxbCtx.createBinder();
Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
ShowingToday shows2 = (ShowingToday) binder.unmarshal(domDoc);

我看过很多类似的问题,但 none 的解决方案有所帮助。关于如何解决它的任何建议?谢谢

您需要在创建 DocumentBuilder 之前调用 setNamespaceAware()。在创建解析器并构建 DOM 之后设置此设置将无效。这很可能是 JAXB 无法解组根元素的原因,因为它会丢失其命名空间。

试试这个:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document domDoc = docBuilder.parse("Now_Showing.xml");