这是一个简单的例子如何检索一些数据。这个例子非常简单,不使用XPath表达式。我建议你先理解它是如何工作的,然后使用XPath表达式。在我看来,如果您无法理解解析器的工作方式,那么使用XPath表达式就没有用处了。
NSString* path = [[NSBundle mainBundle] pathForResource:@"test2" ofType:@"xml"];
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:path];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData
options:0 error:&error];
//NSLog(@"%@", doc.rootElement); // print the whole xml
NSArray *orderDataArray = [doc.rootElement elementsForName:@"OrderData"];
for (GDataXMLElement *orderDataElement in orderDataArray) {
if([orderDataElement childCount] > 0)
{
NSString *attributeForOrderDataElement = [(GDataXMLElement *) [orderDataElement attributeForName:@"HASH"] stringValue];
NSLog(@"attributeForOrderDataElement has value %@", attributeForOrderDataElement);
GDataXMLElement* idElement = (GDataXMLElement*)[[orderDataElement elementsForName:@"id"] objectAtIndex:0];
NSLog(@"id has value %@", idElement.stringValue);
GDataXMLElement* orderDetailElement = (GDataXMLElement*)[[orderDataElement elementsForName:@"orderDetail"] objectAtIndex:0];
GDataXMLElement* listElement = (GDataXMLElement*)[[orderDetailElement elementsForName:@"list"] objectAtIndex:0];
NSArray* orderDetailDataArray = [listElement elementsForName:@"OrderDetailData"];
int count = 0;
for (GDataXMLElement *orderDetailDataElement in orderDetailDataArray) {
NSString *attributeForOrderDetailDataElement = [(GDataXMLElement *) [orderDetailDataElement attributeForName:@"HASH"] stringValue];
NSLog(@"attributeForOrderDetailDataElement has value %@", attributeForOrderDetailDataElement);
count++;
}
NSLog(@"%d", count);
}
}
[doc release];
[xmlData release];
这是输出控制台:
attributeForOrderDataElement has value 208524692 <-- HASH value
id has value 97 <-- id value
attributeForOrderDetailDataElement has value 516790072 <-- HASH value
attributeForOrderDetailDataElement has value 11226247
attributeForOrderDetailDataElement has value 11226247
3 <-- the count
希望它能帮助。
编辑
test2.xml包含您的文件,但你可以把它作为一个字符串。您还可以作为参数传递像串如下:
NSString* xmlString = @"<list>"
"<OrderData HASH=\"1408108039\"></OrderData>"
"<OrderData HASH=\"208524692\">"
"<id>97</id>"
"<customer>"
"<CustomerData HASH=\"2128670187\"></CustomerData>"
"</customer>"
"<billingAddress></billingAddress>"
"<deliveryAddress></deliveryAddress>"
"<orderDetail>"
"<list>"
"<OrderDetailData HASH=\"516790072\"></OrderDetailData>"
"<OrderDetailData HASH=\"11226247\"></OrderDetailData>"
"<OrderDetailData HASH=\"11226247\"></OrderDetailData>"
"</list>"
"</orderDetail>"
"<log/>"
"</OrderData>"
"<OrderData HASH=\"1502226778\"></OrderData>"
"</list>";
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithXMLString:xmlString options:0 error:&error];
为什么乌尔不使用的NSXMLParser? – Leena 2012-02-06 06:42:24
因为我必须编辑这个xml.that的意思是我必须重写XML。 – 2012-02-06 06:42:53
试试这个教程:-http://www.raywenderlich。com/725/how-to-read-and-write-xml-documents-with-gdataxml – Leena 2012-02-06 06:52:31