1

SOAPを使用してWebサービスから受け取った次の文字列を解析しようとしています。Webサービスから受け取ったデータを解析できないため(理由はわかりません。XMLの解析についてはこちらをご覧ください)。 Soap Webサービスを使用)データをNSStringに変換してから、TOUCHXMLを使用して文字列を解析しています

NSString *theXML = [[NSString alloc] 
                    initWithBytes: [webData mutableBytes] 
                    length:[webData length] 
                    encoding:NSUTF8StringEncoding];

私が得る文字列は

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

<s:Body>

<GetCategoryResponse xmlns="http://tempuri.org/">

<GetCategoryResult>

<Root>

<Record>

<catid>1</catid><catname>Hi</catname><catlogo>http://10.25.4.49/monsoonstore/Category/50X50.GIF</catlogo>

</Record>

</Root>

</GetCategoryResult>

</GetCategoryResponse>

</s:Body>

</s:Envelope>

Webサービスから取得したNSDataを読み取るためのパーサーを取得できないため、上記の文字列を次の文字列に変換します(つまり、必要な正確なxml)

<Root><Record><catid>1</catid><catname>Hi</catname><catlogo>http://10.25.4.49/monsoonstore/Category/50X50.GIF</catlogo></Record></Root>

CXMLDocument *doc = [[CXMLDocument alloc] initWithXMLString:check options:0 error:nil];



  NSArray *items = [doc nodesForXPath:@"//Root" error:nil];




for (CXMLElement *item in items) 

{


NSLog(@"Root");

    NSArray *titles = [item elementsForName:@"Record"];

for(CXMLElement *title in titles) 
{
    NSLog(@"Record");

     break;
}

 NSArray *categories = [item elementsForName:@"catid"];

    for(CXMLElement *category in categories)
    {
        NSLog(@"catid");

        break;
    }


NSArray *artists = [item elementsForName:@"catname"];

    for(CXMLElement *artist in artists) 
    {
        NSLog(@"catname");

        break;
        }
.
.
.
.

ルートログとレコードログが呼び出されますが、catidは呼び出されません。何が間違っている可能性がありますか?

4

2 に答える 2

0

を使用NSXMLParserします。指定するとおり、NSDataによって直接作成できるパーサーが必要です。

NSXMLParserには、initWithDataNSDataをパラメーターとして送信することによってNSXMLParserインスタンスを返すがあります。

- (id)initWithData:(NSData *)data

NSXMLParserを使用してiPhoneでXMLを解析します

于 2011-06-04T06:30:44.207 に答える
0

私はあなたがレコードの下で(そしてルートの下ではなく)catidを検索していると思います

 NSArray *categories = [item elementsForName:@"catid"];

NSArray *categories = [titles elementsForName:@"catid"];

つまり、検索要素catidは、ルートではなくレコードの下にあります。

私はTouchXMLに取り組んでいないので、上記のコードはコンパイルエラーを引き起こす可能性がありますが、あなたは私が何を意味するかを知っています。

于 2011-06-04T06:30:59.590 に答える