使用SWXMLHash解析XML中的自闭包时出现问题



当存在自关闭元素时,我在迭代数据时遇到问题。

在第一个例子中,它最终会跳过所有内容,在第二个例子中我没有问题,它会获取我需要的数据。

<ENTRY>
<NAME>Unbridled Halo</NAME>
<DH_DQ_FLAGS/>
<BREED>TB</BREED>
<LAST_PP/>
<WEIGHT>123</WEIGHT>
<AGE>4</AGE>
</ENTRY>
// This has "LAST_PP" as a self closing

<ENTRY>
<NAME>Our Prince</NAME>
<DH_DQ_FLAGS/>
<BREED>TB</BREED>
<LAST_PP>
<TRACK>
<CODE>TAM</CODE>
<NAME>TAMPA BAY DOWNS</NAME>
</TRACK>
<RACE_DATE>2020-04-19</RACE_DATE>
<RACE_NUMBER>2</RACE_NUMBER>
<OFL_FINISH>7</OFL_FINISH>
</LAST_PP>
<WEIGHT>123</WEIGHT>
<AGE>4</AGE>
</ENTRY>

下面是我正在使用的代码示例。

for names in xml["CHART"]["RACE"]["ENTRY"].all
//                capture and append data for each horse
{
var tempArray = [Any]()



if let name = names["NAME"].element?.text,
let weight = names ["WEIGHT"].element?.text,
let age = names ["AGE"].element?.text,
let prevFIN = names ["LAST_PP"]["OFL_FINISH"].element?.text

{

tempArray.append(name)
tempArray.append(Int(weight) ?? 0)
tempArray.append(Int(age) ?? 0)            
tempArray.append(Int(prevFIN) ?? 0)
}

谢谢你的帮助。

正如您在这个问题中看到的,如果所有赋值都正确完成,swift将执行if语句。在您的情况下,分配let prevFIN = names ["LAST_PP"]["OFL_FINISH"].element?.text不会为第一个条目分配任何值,因为找不到关键字["OFL_FINISH"]。所以它跳过if语句。

由于您使用??运算符,因此您可以:

let name = names["NAME"].element?.text,
let weight = names ["WEIGHT"].element?.text
let age = names ["AGE"].element?.text
let prevFIN = names ["LAST_PP"]["OFL_FINISH"].element?.text


tempArray.append(name)
tempArray.append(Int(weight) ?? 0)
tempArray.append(Int(age) ?? 0)            
tempArray.append(Int(prevFIN) ?? 0)

如果找不到值,则会分配0。

最新更新