【问题标题】:Parsing SOAP result using TouchXML in iOS SDK (iPad)在 iOS SDK (iPad) 中使用 TouchXML 解析 SOAP 结果
【发布时间】:2011-01-25 10:40:37
【问题描述】:

我正在开发一个使用 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];

知道我做错了什么吗?

非常感谢。

矿井

【问题讨论】:

    标签: iphone ipad ios soap touchxml


    【解决方案1】:

    尝试使用 NSXMLDocument,它应该和 CXMLDocument 一样工作。以下是一些文档: link

    【讨论】:

    • NSXMLDocument 是可可特有的东西,对吧?我不认为我可以将它与 iOS SDK 一起使用。我找不到任何库或框架来使用它。
    • 我意识到已经很晚了,但是 KissXML 库 (code.google.com/p/kissxml) 复制了 iOS 中的 NSXMLDocument 类(还添加了一些功能)。我与该库无关,但发现它在我自己的许多代码中非常有用!
    【解决方案2】:

    我建议使用 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 解析为它,然后将其作为属性保存在将要访问它的视图控制器中。

    编码愉快!

    【讨论】:

    • TFHpple?这是一种新的 xml 解析器吗?这有多可靠?这就是我试图用 TouchXML 做的事情。 xpath,但它没有给出我想要的结果。 :(
    • TouchXML 设置起来很麻烦。这就是我使用 TFHpple 的原因。它使用相同的 Xpath 表达式,但设置起来要容易得多。 GitHub 页面上的自述文件实际上就是您所需要的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多