我如何解析这个xml在NS中使用NSXMLParser?
<root>
<table name="radios">
<column name="nameradio">Radio1</column>
<column name="logo">http://app.syndicationradio.fr/demo/logo1.png</column>
<column name="stream">http://cloud2.syndicationradio.fr:8020</column>
<column name="twitter">http://www.twitter.com/#syndicationradio</column>
<column name="facebook">http://www.facebook.com/syndicationradio</column>
<column name="titre">http://app.syndicationradio.fr/demo/title.xml</column>
</table>
<table name="radios">
<column name="nameradio">Radio2</column>
<column name="logo">http://app.syndicationradio.fr/demo/logo1.png</column>
<column name="stream">http://cloud2.syndicationradio.fr:8020</column>
<column name="twitter">http://www.twitter.com/#syndicationradio</column>
<column name="facebook">http://www.facebook.com/syndicationradio</column>
<column name="titre">http://app.syndicationradio.fr/demo/title.xml</column>
</table>
</root>
现在请有没有人帮助找出,我怎么能从XML数据使用NSXMLParser
或任何其他XML解析器假设TBXML
在IOS IOS?我如何解析这个xml在NS中使用NSXMLParser?
编辑:你也可以给我举例libxml
解析器这个XML的。
在此先感谢。
尝试这一
- (void)viewDidLoad
{
NSURL *url = [[NSURL alloc]initWithString:@"yourURL"];
NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
[parser setDelegate:self];
BOOL result = [parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
NSLog(@\"Did start element\");
if ([elementName isEqualToString:@"root"])
{
NSLog(@"found rootElement");
return;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@"Did end element");
if ([elementName isEqualToString:@"root"])
{
NSLog(@"rootelement end");
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSString *tagName = @"column";
if([tagName isEqualToString:@"column"])
{
NSLog(@"Value %@",string);
}
}
这是你如何使用的NSXMLParser:
在您的.h文件中声明:
NSMutableData *webPortFolio;
NSMutableString *soapResultsPortFolio;
NSURLConnection *conn;
//---xml parsing---
NSXMLParser *xmlParserPortFolio;
BOOL elementFoundPortFolio;
NSMutableURLRequest *req;
NSString *theXMLPortFolio;
NSString *strSoapMsg;
UIAlertView *alertView;
在您.m文件使用下面的代码:
-(void)callURL
{
//Your logic to call URL.
conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if (conn)
{
webPortFolio = [[NSMutableData data] retain];
}
}
And to handle the response you can use following functions :
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[webPortFolio setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webPortFolio appendData:data];
}
-(void) connection:(NSURLConnection *) connection didFailWithError:(NSError *) error
{
NSLog(@"error...................%@",[error description]);
[webPortFolio release];
[connection release];
}
-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
//Check the request and returns the response.
NSLog(@"DONE. Received Bytes: %d", [webPortFolio length]);
theXMLPortFolio = [[NSString alloc]
initWithBytes: [webPortFolio mutableBytes]
length:[webPortFolio length]
encoding:NSUTF8StringEncoding];
//---shows the XML---
NSLog(@"shows the XML %@",theXMLPortFolio);
[theXMLPortFolio release];
if(xmlParserPortFolio)
{
[xmlParserPortFolio release];
}
xmlParserPortFolio = [[NSXMLParser alloc] initWithData: webPortFolio];
[xmlParserPortFolio setDelegate: self];
[xmlParserPortFolio setShouldResolveExternalEntities:YES];
[xmlParserPortFolio parse];
[webPortFolio release];
[connection release];
}
//---when the start of an element is found---
-(void) parser:(NSXMLParser *) parser
didStartElement:(NSString *) elementName
namespaceURI:(NSString *) namespaceURI
qualifiedName:(NSString *) qName
attributes:(NSDictionary *) attributeDict
{
if([elementName isEqualToString:@"your_tag_name"])
{
if (!soapResultsPortFolio)
{
soapResultsPortFolio = [[NSMutableString alloc] init];
}
elementFoundPortFolio = TRUE;
NSLog(@"Registration...%@",soapResultsPortFolio);
}
else if([elementName isEqualToString:@"your_tag_name"])
{
elementFoundPortFolio = TRUE;
}
else if([elementName isEqualToString:@"your_tag_name"])
{
elementFoundPortFolio = TRUE;
}
else if([elementName isEqualToString:@"your_tag_name"])
{
elementFoundPortFolio = TRUE;
}
}
-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string
{
if (elementFoundPortFolio)
{
[soapResultsPortFolio appendString: string];
}
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
NSLog(@"Parser error %@ ",[parseError description]);
}
//---when the end of element is found---
-(void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"your_tag_name"])
{
NSLog(@"display the soap results%@",soapResultsPortFolio);
}
else if([elementName isEqualToString:@"your_tag_name"])
{
//Perform required action
}
else if([elementName isEqualToString:@"your_tag_name"])
{
//Perform required action
}
else if([elementName isEqualToString:@"your_tag_name"])
{
//Perform required action
}
[soapResultsPortFolio setString:@""];
elementFoundPortFolio = FALSE;
}
好你问例如一个libxml
的例子。我在一个项目中使用它,但用TBXML
而不是NSXMLParser
,因为这个项目导致了编码和数据检索的重要问题。
首先,您必须从网上下载TBXML.m
和TBXML.h
文件并将它们导入到您的项目中。然后,你还必须在链接二进制与图书馆链接libxml2.dylib
到您的项目。
一旦这样做了,你将不得不这样做是为了获取你的数据(根据您的XML源):
NSData *xmlData = [NSData dataWithContentsOfURL:yourURL];
TBXML *tbxml = [TBXML newTBXMLWithXMLData:data error:nil];
[self getData:tbxml.rootXMLElement];
- (void) getData : (TBXMLElement *) element
{
do {
if([[TBXML elementName:element] isEqualToString:@"table"])
{
if([[TBXML elementName:element] isEqualToString:@"column"])
{
if([[TBXML attributeName:element] isEqualToString:@"nameradio"])
{
// You decide what to do here
}
}
}
if (element->firstChild) [self getData:element->firstChild];
} while(element = element->nextSibling);
}
你可能要改变这种代码,但在这里,你有你的基本的东西需要。
thanks.that是you.could你给我TBXML.h和TBXML.m的链接,这样漂亮,清晰的代码。因为我已经下载了一个,但它显示出一些错误。 – Emon 2013-03-02 10:36:54
有了快感;)[这里](https://github.com/71squared/TBXML/blob/master/TBXML-Headers/TBXML.h),你会发现头文件和[这里](https://开头的github .com/71squared/TBXML/blob/master/TBXML-Code/TBXML.m)代码文件。这是1.5版本,我使用并且为我工作得很好。 – Rob 2013-03-02 10:42:44
抱歉地说,但这里是另外一个问题是'如果([TBXML的attributeName:元素] isEqualToString:@“nameradio”])'显示出一些华林类似的东西'兼容的指针类型TBXMLElement *' – Emon 2013-03-02 11:52:31
我有一个字符串,而不是URL:的NSString * urlString = [NSString的stringWithFormat:@ “http://www.somewebsite.com/RunPHPtoOutputXML.php?id=%d”,II]; // ii是一个整数,然后运行以下命令获取XML:NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];我们可以使用NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; – user3741598 2014-07-14 03:17:08
@ user3741598究竟你想问什么? – 2014-07-14 05:01:51
我被切断了 - 太多人物 - 会开启一个新问题。虽然我刚刚想出了一个潜在的快速,肮脏的可能的工作答案,我会回家时尝试。感谢您的询问。 – user3741598 2014-07-14 14:03:17