【问题标题】:Deserialize Child XML Elements as an XML String将子 XML 元素反序列化为 XML 字符串
【发布时间】:2018-09-04 15:46:21
【问题描述】:

使用 Jackson 或 JAXB,有没有办法将子 XML 元素的整个子树反序列化/编组为字符串?

例如,给定以下 XML:

<root>
  <foo>
    <bar>
      <baz/>
    </bar>
  </foo>
</root>

有没有办法将其反序列化/编组到以下类

@XmlRootElement
public class Root {
    private String foo;

    // constructors, getters, setters, etc.
}

结果看起来像Root(foo="&lt;bar&gt;&lt;baz/&gt;&lt;/bar&gt;")?

【问题讨论】:

    标签: java xml jackson jaxb jackson-dataformat-xml


    【解决方案1】:

    您可以为此编写自己的杰克逊反序列化器:

    public class Test {
      public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new XmlMapper();
        final SimpleModule module = new SimpleModule("configModule",   Version.unknownVersion());
        module.addDeserializer(Root.class, new DeSerializer());
        mapper.registerModule(module);
        // Root readValue = mapper.readValue(<xml source>);
      }
    }
    
    class DeSerializer extends StdDeserializer<Root> {
    
      protected DeSerializer() {
        super(Root.class);
      }
    
      @Override
      public Root deserialize(JsonParser p, DeserializationContext ctxt) throws Exception {
        // use p.getText() and p.nextToken to navigate through the xml and construct Root object
        return new Root();
    
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多