2016-09-05 3 views
0

こんにちは、SwiftyXMLParserを使用してサーバーからxml応答を解析しています。私は正常に単一のXMLを解析することができますが、配列の値に問題があります。いつもここにnilをSwiftyXMLParserを使用しているXML SwingXMLParserを解析しているSwiftエラー

は私のサンプルXML

<ItemTrackingDetailsResponse xmlns="http://singpost.com/paw/ns" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <ItemsTrackingDetailList> 
     <ItemTrackingDetail> 
      <TrackingNumber>SMT0000000628</TrackingNumber> 
      <TrackingNumberFound>true</TrackingNumberFound> 
      <AlternativeTrackingNumber/> 
      <TrackingNumberActive>true</TrackingNumberActive> 
      <PostingDate/> 
      <InsuredValue/> 
      <InsuredSDR/> 
      <Weight/> 
      <ExpressInd/> 
      <ItemCategory/> 
      <Content/> 
      <PreadviceDate/> 
      <ReceptacleID/> 
      <OriginalCountry>Singapore</OriginalCountry> 
      <DestinationCountry>Singapore</DestinationCountry> 
      <ItemType>Speedpost</ItemType> 
      <DeliveryStatusDetails> 
       <DeliveryStatusDetail> 
        <StatusDescription>Recovered item from POPStation for service recovery</StatusDescription> 
        <Location>SPEEDPOST SERVICE CENTRE</Location> 
        <BeatNo/> 
        <Date>2016-08-22T16:35:30</Date> 
        <AceDate>20160822 163530</AceDate> 
       </DeliveryStatusDetail> 
       <DeliveryStatusDetail> 
        <StatusDescription>Delivered to POPStation</StatusDescription> 
        <Location>[email protected] Tee Square</Location> 
        <BeatNo/> 
        <Date>2016-08-16T17:27:48</Date> 
        <AceDate>20160816 172748</AceDate> 
       </DeliveryStatusDetail> 
       <DeliveryStatusDetail> 
        <StatusDescription>With Delivery Courier</StatusDescription> 
        <Location>SPEEDPOST SERVICE CENTRE</Location> 
        <BeatNo/> 
        <Date>2016-08-16T11:25:00</Date> 
        <AceDate>20160816 112500</AceDate> 
       </DeliveryStatusDetail> 
       <DeliveryStatusDetail> 
        <StatusDescription>Received at Processing Facility</StatusDescription> 
        <Location>SPEEDPOST SERVICE CENTRE</Location> 
        <BeatNo/> 
        <Date>2016-08-16T10:28:07</Date> 
        <AceDate>20160816 102807</AceDate> 
       </DeliveryStatusDetail> 
       <DeliveryStatusDetail> 
        <StatusDescription>Notification of shipment confirmation</StatusDescription> 
        <Location>SPEEDPOST SERVICE CENTRE</Location> 
        <BeatNo/> 
        <Date>2016-08-13T11:10:29</Date> 
        <AceDate>20160813 111029</AceDate> 
       </DeliveryStatusDetail> 
      </DeliveryStatusDetails> 
     </ItemTrackingDetail> 
    </ItemsTrackingDetailList> 
    <Status> 
     <ErrorCode>0</ErrorCode> 
     <ErrorDesc>Success</ErrorDesc> 
    </Status> 
</ItemTrackingDetailsResponse> 

でしまった私は

print(xml!["ItemTrackingDetailsResponse","ItemsTrackingDetailList","ItemTrackingDetail","ItemType"].text) 

によって単一の項目を取得することができますが、配列のために、私は詳細を取得することはできません。アレイメンバーにアクセスするには?どんな助けでも大変感謝しています。次のように感謝

<DeliveryStatusDetails> 
        <DeliveryStatusDetail> 
         <StatusDescription>Recovered item from POPStation for service recovery</StatusDescription> 
         <Location>SPEEDPOST SERVICE CENTRE</Location> 
         <BeatNo/> 
         <Date>2016-08-22T16:35:30</Date> 
         <AceDate>20160822 163530</AceDate> 
        </DeliveryStatusDetail> 
        <DeliveryStatusDetail> 
         <StatusDescription>Delivered to POPStation</StatusDescription> 
         <Location>[email protected] Tee Square</Location> 
         <BeatNo/> 
         <Date>2016-08-16T17:27:48</Date> 
         <AceDate>20160816 172748</AceDate> 
        </DeliveryStatusDetail> 
        <DeliveryStatusDetail> 
         <StatusDescription>With Delivery Courier</StatusDescription> 
         <Location>SPEEDPOST SERVICE CENTRE</Location> 
         <BeatNo/> 
         <Date>2016-08-16T11:25:00</Date> 
         <AceDate>20160816 112500</AceDate> 
        </DeliveryStatusDetail> 
        <DeliveryStatusDetail> 
         <StatusDescription>Received at Processing Facility</StatusDescription> 
         <Location>SPEEDPOST SERVICE CENTRE</Location> 
         <BeatNo/> 
         <Date>2016-08-16T10:28:07</Date> 
         <AceDate>20160816 102807</AceDate> 
        </DeliveryStatusDetail> 
        <DeliveryStatusDetail> 
         <StatusDescription>Notification of shipment confirmation</StatusDescription> 
         <Location>SPEEDPOST SERVICE CENTRE</Location> 
         <BeatNo/> 
         <Date>2016-08-13T11:10:29</Date> 
         <AceDate>20160813 111029</AceDate> 
        </DeliveryStatusDetail> 
</DeliveryStatusDetails> 
+0

誰もが理想的なを持っていますか? –

答えて

1

あなたは子配列のコンテンツにアクセスすることができます

print(xml["ItemTrackingDetailsResponse","ItemsTrackingDetailList","ItemTrackingDetail","DeliveryStatusDetails","DeliveryStatusDetail",0,"Location"].text) 

"DeliveryStatusDetail",0あなたは0番目の位置DeliveryStatusDetail要素にアクセスすることを意味します。

は、配列を列挙するには、次の

for DeliveryStatusDetail in xml["ItemTrackingDetailsResponse","ItemsTrackingDetailList","ItemTrackingDetail","DeliveryStatusDetails","DeliveryStatusDetail"] { 
    print(DeliveryStatusDetail["Location"].text) 
} 
+1

は完全に機能します。どうもありがとう!。しかし、どのように配列をループすることができますか? –

+0

コードを更新しました! –

+0

ありがとうございました、XMLでの作業がより簡単になりました。とにかく、xml全体を出力することができます(応答が正しいかどうかをテストするため)? –

関連する問題