【问题标题】:Trouble parsing a self closure in XML using SWXMLHash使用 SWXMLHash 解析 XML 中的自闭包时遇到问题
【发布时间】:2020-08-29 19:04:27
【问题描述】:

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

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

<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 xml swxmlhash


    【解决方案1】:

    正如您在this question 中看到的那样,如果所有分配都正确完成,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。

    【讨论】:

    • 哦,天哪...有时您无法透过树木看到森林。谢谢你的回答。我觉得这应该更容易弄清楚。
    • 没问题 ;) 我希望这是导致您的问题的错误
    • 对我该如何处理有什么建议吗?看不懂
    • 好吧,我不知道 Swift,但你可以例如将其拆分为 4 个 if 语句并将每个变量分别添加到临时数组中
    • 这就是我一直在尝试的。我只是无法弄清楚如何将其视为零。我会继续插电。至少你让我走得更远,
    猜你喜欢
    • 2011-02-12
    • 2013-02-25
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多