1

WebService の関数を使用している iPad プロジェクトに取り組んでいます。Web サービス接続、データなどの処理が見つかります。しかし、TouchXML を使用して結果の SOAP を解析できません。xml からノードを取得すると、常に 0 の長さが返されます。

出力 xml:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<soap:Body>
<LogOnResponse xmlns="http://coreservices.org/v1">
<LogOnResult>
<Id>1c0e9ad0-a3be-4cd0-8f0d-0616a63a4e28</Id>
<userId>2</userId>
<user>
<ID>2
<Name>Beheerder
<emailAddress />
<cultureName>nl-NL</cultureName>
</user>
</LogOnResult>
</LogOnResponse>
</soap:Body>
</soap:Envelope>

パーサー コード:


 NSData *aData = [[NSData alloc] initWithBytes:[webData mutableBytes]
length:[webData length]]; NSString *xmlData = [[NSString alloc] initWithData:aData
encoding:NSASCIIStringEncoding]; NSLog(@"%@", xmlData); [xmlData release]; CXMLDocument *domUserIdentity = [[[CXMLDocument alloc] initWithData:aData
options:0
error:nil]
autorelease]; [aData release]; NSArray *nodesList = [domUserIdentity nodesForXPath:@"//LogOnResult" error:nil]; // 0 length for (CXMLElement *resultElement in nodesList) { for (int counter = 0; counter NSString *elemName = [[resultElement childAtIndex:counter] name]; NSString * elemValue = [[[resultElement childAtIndex:counter]
stringValue]
stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]]; [elemName release]; [elemValue release]; } } [nodesList release];

私は何を間違えたのですか?

よろしくお願いします。

イノエル

4

2 に答える 2

1

NSXMLDocument を使用してみてください。CXMLDocument と同様に機能するはずです。ここにいくつかのドキュメントがあります: リンク

于 2011-01-25T11:23:03.600 に答える
1

XPath パーサーを使用することをお勧めします。あなたは重いことを何もしていないので、スピードヒットはそれだけの価値があります. 私の個人的な選択はTFHppleです。わずかに高速で正確なソリューションがありますが、TFHpple のシンプルさに勝るものはありません。

例:

NSData *data = [[NSData alloc] initWithContentsOfFile:@"example.html"]; 
// Create parser xpathParser = [[TFHpple alloc] initWithXMLData:data];
NSArray *elements = [xpathParser search:@"//LogOnResult"];
TFHppleElement *element = [elements objectAtIndex:0];
// Get the text within the cell tag NSString *content = [element content];
[xpathParser release]; [data release];

明らかに、必要な部分を保存するためのコードを作成する必要があります。このデータを見ると、プロパティでアクセスできるカスタム データ ホルダー クラスを作成することになるでしょう。XML を解析して、それにアクセスするビュー コントローラーにプロパティとして保存できます。

ハッピーコーディング!

于 2011-01-25T11:54:02.623 に答える