Skip to main content

XcodeでXMLファイルを解析する方法

【iPhoneアプリ開発】XML読み込み (六月 2025)

【iPhoneアプリ開発】XML読み込み (六月 2025)
Anonim

多くのアプリケーションのバックボーンである簡単なタスクの1つは、XMLファイルを解析する機能です。そして幸いにも、XcodeはObjective-CでXMLファイルを比較的簡単に解析できます。

XMLファイルには、アプリに関する基本データからウェブサイトのRSSフィードまで、あらゆるものを含めることができます。また、アプリ内の情報を遠隔から更新する素晴らしい方法でもあり、新しい項目をリストに追加するだけで、新しいバイナリをAppleに提出する必要はありません。

では、XcodeでXMLファイルをどのように処理するのですか?このプロセスには、使用する変数を初期化し、XMLパーサープロセスを開始し、そのプロセスにファイルを送り、個々の要素の開始、要素内の文字(値)、個々の要素の終わり、および終了解析プロセスの

この例では、特定のWebアドレス(URL)を渡してインターネットからファイルを解析します。

ヘッダーファイルの作成から始めます。これは、ファイルを解析するための最小限の要件を持つ詳細ビューコントローラ用の非常に基本的なヘッダーファイルの例です。

@interface RootViewController:UITableViewController {DetailViewController * detailViewController;NSXMLParser * rssParser;NSMutableArray * articles;NSMutableDictionary * item;NSString * currentElement;NSMutableString * ElementValue;BOOLエラー解析。}@プロパティ(非構造、保持)IBOutlet DetailViewController * detailViewController; - (void)parseXMLFileAtURL:(NSString *)URL;parseXMLFileAtURL関数がプロセスを開始します。処理が完了すると、NSMutableArrayの「記事」がデータを保持します。配列は、XMLファイルのフィールド名に関連するキーを持つ変更可能な辞書で構成されます。

必要な変数を設定したので、.mファイルのプロセスのミーティングに移ります:

- (void)parserDidStartDocument:(NSXMLParser *)parser {NSLog(@ "ファイルが見つかり、解析が開始されました";}

この関数は、プロセスの開始時に実行されます。この関数には何も置く必要はありませんが、ファイルの解析が開始されたときにタスクを実行する場合は、ここでコードを記述します。

- (void)parseXMLFileAtURL:(NSString *)URL{(Mac OS X 10_5_6; en-us)AppleWebKit / 525.27.1(GeckoのようなKHTML)バージョン/ 3.2.1 Safari / 525.27.1 "; NSString * agentString = @" Mozilla /NSMutableURLRequest * request = NSMutableURLRequest requestWithURL:NSURL URLWithString:URL;request setValue:エージェント文字列forHTTPHeaderField:@ "User-Agent";xmlFile = NSURLConnection sendSynchronousRequest:requestResponse:nilエラー:nil;articles = NSMutableArray alloc init;errorParsing = NO;rssParser = NSXMLParser alloc initWithData:xmlFile;rssParser setDelegate:self;//解析しているXMLファイルのタイプによっては、これらをオンにする必要があるかもしれませんrssParser setShouldProcessNamespaces:NO;rssParser setShouldReportNamespacePrefixes:NO;rssParser setShouldResolveExternalEntities:NO;rssParser parse;}

この関数は、エンジンに特定のWebアドレス(URL)でファイルをダウンロードし、それを解析するプロセスを開始するように指示します。サーバーがiPhone / iPadをモバイル版にリダイレクトしようとした場合に備えて、我々はSafariがMac上で動作していることをリモートサーバーに伝えています。最後のオプションは、特定のXMLファイルに固有です。ほとんどのRSSファイルと一般的なXMLファイルは、それらをオンにする必要はありません。

- (void)パーサー:(NSXMLParser *)パーサーparseErrorOccurred:(NSError *)parseError {NSString * errorString = NSString stringWithFormat:@ "エラーコード%i"、parseError code;NSLog(@ "エラー解析XML:%@"、errorString);errorParsing = YES;}これは、エラーが発生した場合にバイナリ値を設定する簡単なエラーチェックルーティングです。あなたは何をしているのかに応じて、ここでより具体的なものを必要とするかもしれません。エラーの場合に処理した後でコードを実行するだけであれば、その時点でerrorParsingバイナリ変数を呼び出すことができます。

(NSString *)qNameの属性:(NSDictionary *)attributeDict {(NSString *)}パブリックメソッド:currentElement = 要素名コピー;ElementValue = NSMutableString alloc init;if(elementName isEqualToString:@ "item")){item = NSMutableDictionary alloc init;}} XMLパーサーの要素には、個々の要素の先頭で実行される関数、要素の解析中に実行される関数、要素の最後で実行される関数の3つの関数が含まれています。

この例では、RSSファイルに類似したファイルを解析して、XMLファイル内の「項目」の見出しの下にある要素をグループに分類します。処理の開始時に、新しいグループが検出されたときに、要素名「item」をチェックし、アイテム辞書を割り当てます。それ以外の場合は、値の変数を初期化します。

- (void)パーサー:(NSXMLParser *)パーサfoundCharacters:(NSString *)string {ElementValue appendString:string;}

これは簡単な部分です。文字を見つけると、それらを単に変数 "ElementValue"に追加するだけです。

- (void)パーサー:(NSXMLParser *)パーサーdidEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {if(elementName isEqualToString:@ "item")){articles addObject:アイテムコピー;} else {アイテムsetObject:ElementValue forKey:elementName;}}

要素の処理が終了したら、次の2つのうちのいずれかを実行する必要があります。(1)終了要素が「項目」の場合はグループを終了したので、辞書を記事の配列に追加します"または、(2)要素が "item"でなければ、その要素の名前と一致するキーで辞書の値を設定します。 (これは、XMLファイル内の各フィールドに個別の変数を必要としないため、動的に処理することができることを意味します)。

- (void)parserDidEndDocument:(NSXMLParser *)parser {if(errorParsing == NO){NSLog(@ "XML processing done!");} else {NSLog(@ "XML処理中にエラーが発生しました");}}

これは、解析ルーチンに必要な最後の関数です。これは単に文書を終了させるだけです。ここでプロセスを完成させたいコードや、エラーが発生した場合に特別なことをするための特別なコードを記述します。

多くのアプリがここでやりたいことは、データやXMLファイルをデバイス上のファイルに保存することです。そうすれば、ユーザーが次回にアプリケーションを読み込んだときにインターネットに接続していない場合でも、この情報にアクセスできます。

もちろん、最も重要な部分を忘れることはできません。アプリケーションにファイルを解析するように指示します(ファイルを見つけるためにWebアドレスを与えます)。

プロセスを開始するには、このコード行をXML処理を行う適切な場所に追加するだけです。

self parseXMLFileAtURL:@ "http://www.webaddress.com/file.xml";