2012-06-22 29 views
1

我想解析使用简单的Xml框架与松散的映射标志设置,但我得到一个异常的XML文档的一部分。简单的Xml框架宽松映射不工作

XML:

<Body> 
    <TopGoalScorersResponse> 
     <TopGoalScorersResult> 
      <tTopGoalScorer> 
       <sName>Alan Dzagoev</sName> 
       <iGoals>3</iGoals> 
       <sCountry>Y</sCountry> 
       <sFlag>http://footballpool.dataaccess.eu/images/flags/ru.gif</sFlag> 
       <sFlagLarge>http://footballpool.dataaccess.eu/images/flags/ru.png</sFlagLarge> 
      </tTopGoalScorer> 
     </TopGoalScorersResult> 
    </TopGoalScorersResponse> 
</Body> 

的Java:

TopGoalScorer topGoalScorer = serializer.read(TopGoalScorer.class, xml); 

@Root(name="tTopGoalScorer", strict=false) 
public class TopGoalScorer { 
    @Element(name="sName") 
    private String name; 

    @Element(name="iGoals") 
    private int numGoals; 

    @Element(name="sCountry") 
    private String country; 

    @Element(name="sFlag") 
    private String flagImageUrl; 
} 

例外:

06-22 14:11:46.530: E/Soap(2057): Unable to satisfy @org.simpleframework.xml.Element(data=false, name=sCountry,  required=true, type=void) on field 'country' private java.lang.String uk.co.carr.david.TopGoalScorer.country for class uk.co.carr.david.TopGoalScorer at line 1 
06-22 14:11:46.530: E/Soap(2057): org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=sCountry, required=true, type=void) on field 'country' private java.lang.String uk.co.carr.david.TopGoalScorer.country for class uk.co.carr.david.TopGoalScorer at line 1 

任何想法?任何帮助将不胜感激。

感谢 大卫

回答

3

它发生,因为你没有明确路径元素,只是尝试使用下一个结构和一切都会OK

@Root(name="tTopGoalScorer", strict=false) 
    public class TopGoalScorer { 
     @Path("Body/TopGoalScorersResponse/TopGoalScorersResult/tTopGoalScorer/sName") 
     @Element 
     private String name; 
    } 
+0

谢谢,回复。我认为松散映射的想法是你不必担心所有周围的XML?您可以只关注您感兴趣的xml部分。这种方法意味着您必须指定每个节点的确切路径,这并不比在java类中映射整个xml文档好得多。 – user648462

+0

尝试阅读简单的XML教程,但我已经回答你的问题 –

+0

好吧,我误解了如何松散映射的作品。 – user648462

1

一个更好的办法来做到这一点的持留.read(MyClass.class,inputXml,false)。这告诉它忽略注释类中不匹配的任何内容。它比在@Root注释中使用strict = false更好,因为它适用于整个文档。