Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过jackson解析包含多个元素的xml文件_Android_Xml_Jackson_Xml Parsing_Jackson Dataformat Xml - Fatal编程技术网

Android 通过jackson解析包含多个元素的xml文件

Android 通过jackson解析包含多个元素的xml文件,android,xml,jackson,xml-parsing,jackson-dataformat-xml,Android,Xml,Jackson,Xml Parsing,Jackson Dataformat Xml,我有这样一个xml文件: <TABLES> <TABLE NAME="abcd" TIME="2013.05.27 00:00:00" > <LINES> <LINE TIME="2013.05.27 00:00:00" BEGINE="787465" END="787465"/> </LINES> <SPECIAL> <DAY MASK="128" DATE="16714778" /> <WEEK NAM

我有这样一个xml文件:

<TABLES>
<TABLE NAME="abcd" TIME="2013.05.27 00:00:00" >
<LINES>
<LINE TIME="2013.05.27 00:00:00" BEGINE="787465" END="787465"/>
</LINES>
<SPECIAL>
<DAY MASK="128" DATE="16714778" />
<WEEK NAME="abcde" PARAM="128" />
</SPECIAL> 
</TABLE>
</TABLES>

Special有两个不同的标签
DAY
Week
,因此您可以将它们分为两个POJO类,如下所示:

data class DAY(@JacksonXmlProperty(localName = "Date") val date: String, @JacksonXmlProperty(localName = "MASK")val mask: String)

data class WEEK(@JacksonXmlProperty(localName = "PARAM") val param: String,@JacksonXmlProperty(localName = "Name") val name: String)
并在特殊类别中使用它们作为:

data class SPECIAL(@JacksonXmlProperty(localName = "WEEK") val week: WEEK, @JacksonXmlProperty(localName = "DAY") val day: DAY)


要使
特殊
字段成为可选字段,请在
类中使用
将该字段标记为可为空:

data class TABLE(
    @JacksonXmlProperty(localName = "SPECIAL") val special: SPECIAL?,
    @JacksonXmlProperty(localName = "NAME") val name: String,
    @JacksonXmlProperty(localName = "TIME") val time: String
)
特殊
类别为

data class SPECIAL(
    @JacksonXmlProperty(localName = "WEEK") var week: WEEK?,
    @JacksonXmlProperty(localName = "DAY") var day: DAY?
)

好的,我确实喜欢建议的周或日不是强制性的,所以我将它们设置为可选的,但是我有一个错误未识别字段,没有标记为可忽略。当我用@JsonIgnoreProperties(ignoreUnknown=true)注释classed时,解析在没有错误的情况下完成,特殊对象的数量是正确的,但在所有这些对象中,每天和每周都是正确的null@maxxxo
@JsonIgnoreProperties(ignoreUnknown=true)
将避免序列化和反序列化,因此更好地使用
@JsonInclude(包括。非空)
用于可选值,也可将
var
与可空字段一起使用
var day:day?=null
。尽管最好在有问题时提及该要求或发布另一个问题,但我尝试了Include注释和选项,但没有帮助,这是错误:com.fasterxml.jackson.databind.exc.unrecognizedpropertyExceptionon:无法识别的字段“NAME”(class.Special),在[Source:(StringReader);第26行,第58列](通过引用链:>.Table[“SPECDAYS”]->java.util.ArrayList[0]->*.SpecDay[“NAME”])处未标记为可忽略(4个已知属性:“天”、“周”、“日”、“周”)主要问题是,在特殊情况下,Jackson希望属性是天/周而不是天/周。我还尝试将isAttribute=true设置为true,但在将参数从天和周复制到特殊情况下,没有任何更改。它工作正常
data class SPECIAL(
    @JacksonXmlProperty(localName = "WEEK") var week: WEEK?,
    @JacksonXmlProperty(localName = "DAY") var day: DAY?
)