1

我正在开发一个使用 WebService 中的函数的 iPad 项目。处理网络服务连接、数据等工作。但我无法使用 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 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 解析为它,然后将其作为属性保存在将要访问它的视图控制器中。

快乐编码!

于 2011-01-25T11:54:02.623 回答