

現在、NSXMLParserでxmlをパースしてtableviewに表示させるアプリを作成しています。正常にxmlが取得できるケースは問題ないのですが、エラー時（リクエスト時にパラメータが不正な場合やレスポンスの結果が0件の場合など）に、どのようにチェックがすればよいか分からずに困っています。  
下記は、該当するケースの一例です。  
下記のケースの場合、parserDidStartDocumentやparseErrorOccurredのアクションも起きないようです。  

[code]

    <root><error>wrong_parameter</error><error_description>specify valid applicationId</error_description></root>
[/code]

レスポンスにerrorが含まれる場合をチェックしたいのですが、どのように処理すればよいでしょうか？


CC BY-SA 3.0
2016-02-01T08:44:48.317
21572
2016-05-01T15:40:27.500
13350
question
swift xml
swiftでxmlをパースした際のエラー時の処理について


あなたが提示された文字列はXMLとして完全に正しいものですから、NSXMLParserであれ、他のどんなXML構文解析用のライブラリーであれ、ライブラリーの側がエラーを報告することはありません。(ちなみにdelegateを正しく設定してあれば、parserDidStartDocumentは呼ばれます。)

そのようなXMLをエラーとして扱いたいのであれば、「どんなXMLをエラーとして扱うべきなのか」きちんと定義して、ご自分でそれをロジックとしてプログラミンングしてやる必要があります。

例えば「どんな階層であれerror要素が現れたらエラーとして扱う」と言うのであれば、parser(_:didStartElement:namespaceURI:qualifiedName:attributes:)の中で判定することになるでしょう。

[code]

    class MyXMLParser: NSObject, NSXMLParserDelegate {
        let parser: NSXMLParser
    
        //...
    
        func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
            if elementName == "error" {
                print("found error")
                parser.abortParsing()
            }
            //error要素以外の開始タグを見つけた場合の処理
            //...
        }
    }
    
[/code]

まずはきちんとエラーケースと正常ケースを洗い出して、「どんなXMLをエラーとして扱うべきなのか」検討してみてください。


CC BY-SA 3.0
2016-02-01T14:55:28.057
21587
2016-02-01T14:55:28.057
13972
21572
answer