2011-01-25 58 views
1

我正在研究在WebService中使用函數的iPad項目。 處理web服務連接,數據等工程發現。但是我無法使用TouchXML解析結果SOAP。從xml中獲取節點始終返回0長度。在iOS SDK(iPad)中使用TouchXML解析SOAP結果

輸出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];

任何想法,我做了什麼錯?

非常感謝您的提前。

Inoel使用NSXMLDocument

回答

1

嘗試,它應該工作以及CXMLDocument。以下是一些文檔: link

+0

NSXMLDocument是一個可可特定的事情嗎?我不認爲我可以在iOS SDK中使用它。我找不到任何庫或框架來使用它。 – Inoel 2011-01-25 15:05:39

+1

我意識到它遲到了,但KissXML庫(http://code.google.com/p/kissxml/)複製了iOS中的NSXMLDocument類(並添加了一些功能)。我沒有與圖書館聯繫,但是在我自己的代碼中找到它非常有幫助! – 2011-05-07 23:50:14

1

我推薦使用XPath Parser。你沒有做任何太重的事情,所以速度命中值得。我個人的選擇是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,然後將它作爲一個屬性存儲在視圖控制器中,它將訪問它。

快樂編碼!