繁体   English   中英

无法使用 SWXMLHash 解析 XML 中的自闭包

[英]Trouble parsing a self closure in XML using SWXMLHash

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

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

<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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM