📚 Posts

XML 映射为 Java 对象

目标:以 XML 文件 result.mpd 为例,我们希望将其映射为 Java 对象 MPD 以便更好地进行数据处理。

  • 从 XML 文件生成相应的 XSD(XML Schema Definition) 文件。
    XmlReader^ reader = XmlReader::Create("d:\\result.mpd");
    XmlSchemaSet^ schemaSet = gcnew XmlSchemaSet();
    XmlSchemaInference^ inference = gcnew XmlSchemaInference();
    schemaSet = inference->InferSchema(reader);
    
    FileStream^ file = gcnew FileStream("d:\\result.xsd",
        FileMode::Create, FileAccess::ReadWrite);
    XmlTextWriter^ writer = gcnew XmlTextWriter(file, gcnew UTF8Encoding());
    
    for each (XmlSchema^ schema in schemaSet->Schemas()) {
      schema->Write(file);
    }
    
  • 从 XSD 文件生成 Java 类。
    xjc -d "d:\\result" -p chow.dan.mpd "d:\\result.xsd"
    

    其中,-d 指定保存目录(directory),-p 指定类所属包(package),该命令生成 MPD.java,ObjectFactory.java,package-info.java 三个文件。

  • 在 Java 中,通过 JAXB(Java Architecture for XML Binding) 直接解析 XML 文件,可得到 MPD 类的实例。
    JAXBContext context = JAXBContext.newInstance(MPD.class);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    MPD mpd = (MPD) unmarshaller.unmarshal(new ByteArrayInputStream(content.getData()));
    

References

📚 Posts