- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
基本上我有一个返回的 XML 响应和一个字符串,我需要遍历 xml 并将所有信息存储在一个数组中。这是 xml
<?xml version="1.0" encoding="UTF-8"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.2sms.com/2.0/schema/0310_ResponseReportStandard.xsd" Version="1.0">
<Error>
<ErrorCode>00</ErrorCode>
<ErrorReason>OK</ErrorReason>
</Error>
<ResponseData>
<Identification>
<UserID>jonathan.pink@2sms.com</UserID>
</Identification>
<Result>2 records were returned</Result>
<Detail>
<ReportTitle>Message Summary: Today</ReportTitle>
<Record>
<Destination>447790686158</Destination>
<Status>WithNetwork</Status>
<GUID><![CDATA[2011-03-22T10:54:22.097Z]]></GUID>
<DateSubmitted>2011-03-22T10:54:22.097</DateSubmitted>
<DateToSend></DateToSend>
<DateSent>2011-03-22T10:54:22.533</DateSent>
<DateReceived></DateReceived>
<Message><![CDATA[Yet again another test]]></Message>
<ID>2011-03-22 10:54:22.250HIHIIOJTFVETW85TS</ID>
</Record>
<Record>
<Destination>447790686158</Destination>
<Status>SUCCESS</Status>
<GUID><![CDATA[2011-03-22T10:50:40.064Z]]></GUID>
<DateSubmitted>2011-03-22T10:50:40.063</DateSubmitted>
<DateToSend></DateToSend>
<DateSent>2011-03-22T10:50:42.473</DateSent>
<DateReceived>2011-03-22T10:50:54.570</DateReceived>
<Message><![CDATA[This is a test]]></Message>
<ID>2011-03-22 10:50:40.210DRUDVMCEZGETW85TS</ID>
</Record>
<ReportPage ReportID="775797" ItemsPerPage="25" Page="1" TotalItems="2" />
</Detail>
</ResponseData>
</Response>
我需要那些 2 <records>
以及所有要存储在数组中的数据。所以....
记录数组 -> 记录数组 -> 每条记录数组,数据....
我一直坐在这里尝试使用 TBXML 解决这个问题,它很容易获取单个节点....但我不能这样做 :(
最佳答案
好的,您的第一步是创建一个将解析数据的类。例如,将其称为 RecordParser
。我们现在需要在 header 中添加几个方法,以及一个 NSMutableArray
。
@interface RecordParser : NSObject {
NSMutableArray *records;
}
@property(nonatomic,retain)NSMutableArray *records;
-(void)loadRecords:(NSString *)records;
-(void)traverseElement:(TBXMLElement *)element;
@end
现在,开始实现吧。我们现在需要实现这两个方法来执行我们希望它们执行的操作。
- (void)loadRecords:(NSString *)records {
NSString *someXML = @"http://www.something.com/somexml.xml";
TBXML *tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:someXML]] retain];
records = [NSMutableArray array];
[records retain];
if (tbxml.rootXMLElement)
[self traverseElement:tbxml.rootXMLElement];
[tbxml release];
}
基本上,该方法将获取有问题的 XML 文件并开始解析过程。此外,您正在初始化数组并保留它。现在我们来谈谈奶酪。
- (void) traverseElement:(TBXMLElement *)element {
do {
if (element->firstChild)
[self traverseElement:element->firstChild];
if ([[TBXML elementName:element] isEqualToString:@"Record"]) {
TBXMLElement *destination = [TBXML childElementNamed:@"Destination" parentElement:element];
TBXMLElement *status = [TBXML childElementNamed:@"Status" parentElement:element];
TBXMLElement *guid = [TBXML childElementNamed:@"GUID" parentElement:element];
TBXMLElement *dateSub = [TBXML childElementNamed:@"DateSubmitted" parentElement:element];
TBXMLElement *dateToSend = [TBXML childElementNamed:@"DateToSend" parentElement:element];
TBXMLElement *dateSent = [TBXML childElementNamed:@"DateSent" parentElement:element];
TBXMLElement *dateReceived = [TBXML childElementNamed:@"DateReceived" parentElement:element];
TBXMLElement *message = [TBXML childElementNamed:@"Message" parentElement:element];
TBXMLElement *id = [TBXML childElementNamed:@"ID" parentElement:element];
[records addObject:[NSArray arrayWithObjects:
[TBXML textForElement:destination],
[TBXML textForElement:status],
[TBXML textForElement:guid],
[TBXML textForElement:dateSub],
[TBXML textForElement:dateToSend],
[TBXML textForElement:dateSent],
[TBXML textForElement:dateReceived],
[TBXML textForElement:message],
[TBXML textForElement:id],nil]];
}
} while ((element = element->nextSibling));
}
基本上,该方法所做的是遍历 XML 文件以查找具有您要查找的名称的元素,然后从子节点中获取数据。此外,数据被添加到 records
数组。所以基本上,完成后它应该在 records
数组中包含您想要的数据,您可以随意操作这些数据。
这完全未经测试。如果它炸毁了您的计算机并杀死了您的猫,请不要怪我。我通常不会花费所有的精力来编写这样一个完整的方法,但我碰巧喜欢 TBXML
。请让我知道它是否有效。我真的很想知道。
关于iPhone TBXML 循环和解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406424/
我遇到问题包括 TBXML在我的项目中。 guide告诉我包含四个文件,TBXML.h、TBXML.m、NSDataAdditions.h 和 NSDataAdditions.m,但在 the Git
我在我的 iphone 应用程序中使用 TBXML。我有一个类似下一个的 xml: My title subCategory1 subCategory2
我在我的一个项目中使用 TBXML,我想知道 例如,有没有办法检查标签是否不包含文本 对比 This is text 当我使用调试器并输入 po [TBXML textForElement:gr
我有这个 xml: 为了解析它,我使用 [TBXML valueOfAttributeNamed:@
基本上我有一个返回的 XML 响应和一个字符串,我需要遍历 xml 并将所有信息存储在一个数组中。这是 xml 00 OK
对于这个元素,我总是得到 null:Rua Santo Ubaldo, 28 - São Paulo xml文件: 1 Woods Bar
所以我在查找 XML 文件的元素中的未定义元素时遇到了问题。 我能够解析元素“item”... 14459 现在,如果您注意到,在“item”元素的末尾,有一个我需要存储的未定义键……我该怎么做呢?这
我正在使用 TBXML 解析器来解析一些大的 xml 文件。 xml 文件的结构如下: 这是我用来解析 xml 的代码: - (void)loadURL { // Load and
绞尽脑汁想弄清楚这个问题。 TBXML 必须设置 rootXMLElement 才能开始遍历和解析数据。 无论我做什么,当我NSLog 它时,它都是空的。 这是 XML 的示例:
我正在使用 TBXML 进行 XML feed 解析,并使用工具来检测内存泄漏。 仪器告诉我函数中存在内存泄漏 - (TBXMLAttribute*) nextAvailableAttribute {
我的 XML 看起来像这样: 11 22
我正在尝试使用适用于 iOS 的 TBXML 库解析 HTML,并且我想获得这段 HTML 的“更多文本”值: value more text 我用过这段代码,但它似乎不起作用:
我正在使用 TBXML 解析器版本。 1.4,当我通过 TBXML 解析器解析这种后续响应时,得到 EXC_BAD_ACCESS... ~!@#$%^&*()_+?> 遇到这个问题。 据我观察,TB
您好,我有一个解析器可以测试可能出现的错误,例如 D_TBXML_ELEMENT_TEXT_IS_NIL。如果 obj1 是 nil 并且 obj2 有文本 (NSError *) 错误仍然返回一个非
我使用 TBXML 的方法收到内存泄漏解析 XML 文件。 它给我 NSCFString 'Leaked Objects' with。当我查看堆栈跟踪时,它的最后一次调用是使用 TBXML 方法 te
我正在尝试使用 TBXML,我想通过发送用户名和密码来解析 xml,但不知道该怎么做,我已经学习了很多教程。 -(IBAction)login{ NSStr
我有一个 xml 响应需要设置到一个数组中。问题是我需要访问每个元素并将其存储在一个数组中,以便我可以将它用于 tableview。 00 OK
我打算将 TBXML 用于我的天气应用程序。到目前为止,我已经将 NSXMLParser 与 NSURLConnection 一起使用,但我觉得这必须能够更简单、更快和更稳定(当前代码非常复杂,小问题
这是我的问题: 我在我的 iPad 应用程序中使用 TBXML。 XML 服务器响应以 xml 描述行开始: 并且 TBXML 无法解析节点(即 nextSibling 方法变为空)。将 XML 转
我尝试从TBXML开始,但是我不明白它是如何工作的... 如何从文档中获取所有img标签(作为TBXMLElement)? 最佳答案 您阅读指南了吗?从here开始,然后继续here。您提到您试图从文
我是一名优秀的程序员,十分优秀!