Xstream-xml和实体对象相互转换特殊问题

前端之家收集整理的这篇文章主要介绍了Xstream-xml和实体对象相互转换特殊问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

之前发了一篇博文《xml和实体对象相互转换 一步到位》,在项目实际应用过程中我遇到了这种xml格式:

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <html>
  3. bodydivid="div1"name="div">123</divformaction="saveForm.asp"method="post"h1>请输入您的联系信息:lable>名字:pinputtype="submit"id="btn_sub"name="btn_sub"value="Submit"/>
  4. inputtype="reset"id="btn_res"name="btn_res"value="Reset"form>

原来我举例用的是以下xml文件

两个xml的区别是:

<div id="div1" name="div"/>

<div id="div1" name="div">123</div>

针对<a b="">123</a>这种类型的问题解决方案是:见代码

修改原来的HtmlDiv:加了字段value,然后注解加了@XStreamConverter(HtmlConverter.class),HtmlConverter这是自己实现了Xstream的Converter

Java代码
    @XStreamAlias("div")
  1. @XStreamConverter(HtmlConverter.class)
  2. publicclassHtmlDivimplementsBaseConverterBean{
  3. @XStreamAsAttribute
  4. privateStringid;
  5. privateStringname;
  6. privateStringvalue;
  7. publicStringgetId(){
  8. returnid;
  9. }
  10. voidsetId(Stringid){
  11. this.id=id;
  12. publicStringgetName(){
  13. returnname;
  14. voidsetName(Stringname){
  15. this.name=name;
  16. publicStringgetValue(){
  17. returnvalue;
  18. voidsetValue(Stringvalue){
  19. this.value=value;
  20. }


HtmlConverter:

classHtmlConverterimplementsConverter{
  • @Override
  • voidmarshal(Objectobj,HierarchicalStreamWriterwriter,MarshallingContextarg2){
  • HtmlDivdiv=(HtmlDiv)obj;
  • writer.setValue(div.getValue());
  • publicObjectunmarshal(HierarchicalStreamReaderreader,UnmarshallingContextarg1){
  • HtmlDivdiv=newHtmlDiv();
  • div.setValue(reader.getValue());
  • returndiv;
  • @SuppressWarnings("unchecked")
  • booleancanConvert(Classclazz){
  • returnclazz.equals(HtmlDiv.class);
  • 经测试这样就能取到value的值的。


    @XStreamConverter(value=ToAttributedValueConverter.class,strings{"fileName})
    publicstaticInputFileInfo{
    @XStreamAsAttribute
    privateStringtype;
    StringfileName;

    }
  • 同上自定义转换一样功能

    http://crawler.iteye.com/blog/1672986

    猜你在找的XML相关文章