java - 如何使用 Woodstox StAX 2 序列化/反序列化 XML 中的类

标签 java xml xml-serialization stax woodstox

我非常想存档,在 how-to-serialize-deserialize-simple-classes-to-xml-and-back 中做了什么(C#) 在 Java 中。如果可能,我想避免为每个类编写序列化/反序列化方法。

例如serialize的一部分:

    XMLOutputFactory xof = null;
    XMLStreamWriter2 writer = null;

    try {
        resp.setContentType("text/plain");
        xof = XMLOutputFactory.newInstance();
        writer = (XMLStreamWriter2) //
        xof.createXMLStreamWriter(resp.getOutputStream());

        writer.writeStartDocument("1.0");
        writer.writeStartElement("data");
        // 
        // Magic happens here.
        //
        writer.writeEndElement();
        writer.writeEndDocument();
    } catch (XMLStreamException e) {
        e.printStackTrace();
        resp.sendError(1, "Problem 1 occured.");
    } finally {
        try {
            writer.flush();
            writer.close();
        } catch (XMLStreamException e) {
            e.printStackTrace();
            resp.sendError(2, "Problem 2 occured.");
        }
    }

不是这个问题的一部分,因为我正在尝试逐一解决问题,但可能会让您了解我正在尝试做什么。当我反序列化时,我还想检查输入是否有效。最终我想使用具有序列化形式的 XSLT 转换。

最佳答案

JAXB 是将 Java 对象序列化为 XML 的方式。以下内容将帮助您入门:

JAXB 实现

这个标准有几种实现方式:

Woodstox StAX 2

JAXB 接受许多输入/输出格式,包括 StAX。

验证

XML 使用 Unmarshaller 转换为对象,而对象使用 Marshaller 转换为 XML。您可以设置 javax.xml.validation.Schema 的实例以在这些操作期间验证输入。

您还可以直接将 javax.xml.validation API 与 JAXB 一起使用,查看以下示例:

XSLT

Java 中使用 javax.xml.transform 库来执行 XSLT 转换。 JAXB 旨在使用 JAXBSource 和 JAXBResult 与这些库一起工作。

了解更多信息

查看我的博客:

关于java - 如何使用 Woodstox StAX 2 序列化/反序列化 XML 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213369/

相关文章:

xml - XML 文件的替代文件扩展名?

javascript - 请求的资源上不存在 Access-Control-Allow-Origin header

java - 如何将 JAXB 整数解码为其等效的枚举?

C# xml序列化

xml - 使用 XML::LibXML::XPathContext 通过 Perl 解析 XML

java - 使用保持格式的 DOM 在 XML 中追加元素

python - lxml 增量 XML 序列化重复命名空间

java - 在 Web 应用程序中保留设置文件

java - 在java中使用正则表达式,解析文本的各个部分

java - ObjectInputStream 拖拽程序