0

Objective-C で解析したい XML ファイルがありますが、より良い方法が見つかりません...

<record xmlns="http://www.loc.gov/MARC21/slim">
  <datafield ind1=" " ind2=" " tag="020">
    <subfield code="z">1234567890</subfield>
  </datafield>
  <datafield ind1="1" ind2=" " tag="100">
    <subfield code="a">Ashton-Good, Donna.</subfield>
  </datafield>
  <datafield ind1="1" ind2="0" tag="245">
    <subfield code="a">Eazee skating</subfield>
    <subfield code="h">[videorecording] :</subfield>
    <subfield code="b">the basics of ice skating for beginners of all ages /</subfield>
    <subfield code="c">Donna Ashton-Good.</subfield>
  </datafield>
  <datafield ind1="3" ind2=" " tag="246">
    <subfield code="a">Easy skating</subfield>
  </datafield>
  <datafield ind1=" " ind2=" " tag="260">
    <subfield code="a">[S.l.] :</subfield>
    <subfield code="b">D. Ashton-Good,</subfield>
    <subfield code="c">c1999.</subfield>
  </datafield>
</record>

この XML には、データを取得するために解析する必要があるタグとコードが含まれています。この XML の解析を手伝ってください。

4

2 に答える 2

1

次のように、h ファイルで配列と文字列を宣言します。

NSMutableArray *aryCategory;
 NSString *strCategroyName;

パーサーの使用を開始するための.mファイルで:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:yourData]; // your data will be instance of NSData or NSMutableData
parser.delegate = self;
[parser parse];

これは、xml データを取得すると実行されます。結果を処理するにはNSXMLParserDelegate、次のように使用できます。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
     if ([elementName isEqualToString:@"category"]) {
          aryCategory = [[NSMutableArray alloc] init];
          strCategroyName = @"";
     }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
     strCategroyName = [NSString stringWithFormat:@"%@%@", strCategroyName, string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([elementName isEqualToString:@"categoryName"]) {
          [aryCategory addObject:strCategroyName];
          strCategroyName = @"";
     }
}

これで、すべてのカテゴリ名で配列が埋められます。

お役に立てれば :)

于 2012-08-08T07:02:09.047 に答える
0

NSXMLParserを使用できます。XPath を使用する場合は、TouchXMLなどの外部ライブラリがあります。

于 2012-08-08T06:58:05.123 に答える