从java对象到xml的JAXB序列化程序

从java对象到xml的JAXB序列化程序,java,xml,jaxp,dtd,Java,Xml,Jaxp,Dtd,我是一名XML编程新手,我正在尝试将一些java对象写入一个格式良好且有效的XML文件,而不是DTD文件 我发现我可以用JAXP和Java来做这类事情。 我的应用程序将使用一个接口检索一些数据,然后我需要将这些数据写入一个XML文件中,该文件涉及我以前创建的DTD 我试图找到一些关于这次行动的信息,但失败了 我该怎么做这个手术 编辑:请注意,我需要坚持使用DTD,不能切换到XML模式,我需要从Java对象转换到XML,而不是反之亦然。 我发现重复的答案不适用于我的问题 不知道DTD是否有帮助,但

我是一名XML编程新手,我正在尝试将一些java对象写入一个格式良好且有效的XML文件,而不是DTD文件

我发现我可以用JAXP和Java来做这类事情。 我的应用程序将使用一个接口检索一些数据,然后我需要将这些数据写入一个XML文件中,该文件涉及我以前创建的DTD

我试图找到一些关于这次行动的信息,但失败了

我该怎么做这个手术

编辑:请注意,我需要坚持使用DTD,不能切换到XML模式,我需要从Java对象转换到XML,而不是反之亦然。 我发现重复的答案不适用于我的问题

不知道DTD是否有帮助,但它在这里

DTD


首先需要将对象序列化为xml,然后需要根据dtd验证id

您有一个如何将类序列化为xml的示例


演示如何使用xml文件外部或内部的dtd验证xml文件。

基本上,使用JAXBContext和Marshaller将Java对象转换为xml的方法与使用dtd验证xml的方法相同

请参见示例代码:

    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
    XMLReader xr = sp.getXMLReader();

    JAXBContext jc = JAXBContext.newInstance("blog.log4j");
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
    xr.setContentHandler(unmarshallerHandler);

    FileInputStream xmlStream = new FileInputStream("src/blog/log4j/sample1.xml");
    InputSource xmlSource = new InputSource(xmlStream);
    xr.parse(xmlSource);

    Log4JConfiguration config = (Log4JConfiguration) unmarshallerHandler.getResult();

    Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(config, System.out);

.

这回答了您的问题。我应该知道,我最近尝试过这个方法,效果很好。谢谢你的回答,但我不认为这个问题是重复的,你链接我的那个问题没有回答我的问题,也不满足我的约束。我提供的答案链接允许你使用xjc从DTD生成Java对象,xjc是bin文件夹中JDK附带的。它不会创建XML模式,但您仍然可以使用JAXB从Java对象生成XML。从DTD创建模式可能会让人望而生畏。首先,再次感谢您抽出时间。我需要做的是从一些java对象开始,针对DTD生成有效的XML。我不想从DTD创建Java对象,这不是我的目标。我已经有了Java对象,我想使用JAXP将它们写入一个有效的XML文件。问题是如何根据一些DTD在XML中序列化对象。你的回答中没有提到这一点。
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
    XMLReader xr = sp.getXMLReader();

    JAXBContext jc = JAXBContext.newInstance("blog.log4j");
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
    xr.setContentHandler(unmarshallerHandler);

    FileInputStream xmlStream = new FileInputStream("src/blog/log4j/sample1.xml");
    InputSource xmlSource = new InputSource(xmlStream);
    xr.parse(xmlSource);

    Log4JConfiguration config = (Log4JConfiguration) unmarshallerHandler.getResult();

    Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(config, System.out);