TouchXML:使用Iphone读取EDSP信息的问题

时间:2010-11-09 09:12:18

标签: iphone xml parsing touchxml

我正在使用TouchXML来解析传入的XML文件。到目前为止,一切都运行良好,但有了这个文件,我遇到了很多麻烦:

<item>
        <title><![CDATA[Hotel Katschberghof]]></title>
        <edsp:uid>92090</edsp:uid>
        <link>http://test.dataapi.herold.at/search?aId=yasssu&amp;auth=MjAxMDExMDgwNTAwMDA6TkRobU1HVXdNVGt6T1RabFpUQTJZalV4WXpBeE1qa3pZbUZsTmpjM01qST0NCg%3D%3D&amp;c=15&amp;provider=&amp;q=PN1VW&amp;type=yp_detail</link>
        <description><![CDATA[Betrieben wird ein 4 Sterne Hotel mit ca. 140 Betten.  Mit 29.04.2008 wurde die Einzelfirma Christine Kröth in die gegenständliche Einzelfirma eingebracht.]]></description>
        <guid>PN1VW</guid>
        <georss:point>47.0579478809204 13.6152591216261</georss:point>
        <geo:point>
            <geo:lat>47.0579478809204</geo:lat>
            <geo:long>13.6152591216261</geo:long>
        </geo:point>
        <edsp:itemExt type="ds">
            <edsp:fReq reqVStr="Details">
                <edsp:reqQStr>http://test.dataapi.herold.at/search?aId=yasssu&amp;auth=MjAxMDExMDgwNTAwMDA6TkRobU1HVXdNVGt6T1RabFpUQTJZalV4WXpBeE1qa3pZbUZsTmpjM01qST0NCg%3D%3D&amp;c=15&amp;provider=&amp;q=PN1VW&amp;type=yp_detail
                </edsp:reqQStr>
            </edsp:fReq>
            <edsp:coord lat="47.0579478809204" long="13.6152591216261" />
            <edsp:contact>
                <edsp:cName fN="" lN="Hotel Katschberghof" />
                <edsp:cInfo>
                    <edsp:tel>+4347342660</edsp:tel>
                    <edsp:fax>+434734406</edsp:fax>
                    <edsp:eml>info@katschberghof.at</edsp:eml>
                    <edsp:web>http://www.katschberghof.at</edsp:web>
                </edsp:cInfo>
                <edsp:cAddr str="Nr. 4" pCd="9863" cty="Katschberghöhe"
                    cnt="A" />
            </edsp:contact>
        </edsp:itemExt>
        <edsp:itemInfo type="lst">
            <edsp:lstDetails>
                <edsp:actionProps>
                    <edsp:actionProp action="showMapLink" enabled="true" />
                    <edsp:actionProp action="showRouteLink" enabled="true" />
                    <edsp:actionProp action="showFacebookLink"
                        enabled="false" />
                    <edsp:actionProp action="showVideoLink" enabled="false" />
                    <edsp:actionProp action="showDiaLink" enabled="false" />
                    <edsp:actionProp action="showVoucherLink" enabled="false" />
                </edsp:actionProps>
            </edsp:lstDetails>
            <edsp:styleProps>
                <edsp:styleProp styleRef="mobEuro" />
            </edsp:styleProps>
        </edsp:itemInfo>
    </item>

现在我尝试获取//项目,但不是获取所有相关信息(主要是:edsp:contact和geo:lat)

NSString *XMLPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"testhotels.xml"];

NSData *XMLData   = [NSData dataWithContentsOfFile:XMLPath];

CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:XMLData options:0 error:nil] autorelease];

NSLog(@"Starting XML Parsing");

NSArray *nodes = NULL;

for(CXMLElement *节点中的节点){

    item = [[NSMutableDictionary alloc] init];

    int counter;

    for(counter = 0; counter < [node childCount]; counter++) {

    //  [item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];

        NSString * value = [[[node childAtIndex:counter] stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

        if ([value length] != 0){

            [item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] localName]]; //localName]];

        }



    }

    [res addObject:item];

    NSLog(@"test 1: %@", [[item valueForKey:@"edsp"] stringValue]);

    [item release];

}

NSLog(@"%@", res);

[res release];

这是LOG文件:

{
    description = "Betrieben wird ein 4 Sterne Hotel mit ca. 140 Betten.  Mit 29.04.2008 wurde die Einzelfirma Christine Kr\U00f6th in die gegenst\U00e4ndliche Einzelfirma eingebracht.";
    guid = PN1VW;
    itemExt = "\n\t\t\t\t\n\t\t\t\t\thttp://test.dataapi.herold.at/search?aId=yasssu&auth=MjAxMDExMDgwNTAwMDA6TkRobU1HVXdNVGt6T1RabFpUQTJZalV4WXpBeE1qa3pZbUZsTmpjM01qST0NCg%3D%3D&c=15&provider=&q=PN1VW&type=yp_detail\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t+4347342660\n\t\t\t\t\t\t+434734406\n\t\t\t\t\t\tinfo@katschberghof.at\n\t\t\t\t\t\thttp://www.katschberghof.at\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t";
    link = "http://test.dataapi.herold.at/search?aId=yasssu&auth=MjAxMDExMDgwNTAwMDA6TkRobU1HVXdNVGt6T1RabFpUQTJZalV4WXpBeE1qa3pZbUZsTmpjM01qST0NCg%3D%3D&c=15&provider=&q=PN1VW&type=yp_detail";
    point = "\n\t\t\t\t47.0579478809204\n\t\t\t\t13.6152591216261\n\t\t\t";
    title = "Hotel Katschberghof";
    uid = 92090;
}

感谢您提出如何解决此问题的任何建议......

BR,

的Stefan

1 个答案:

答案 0 :(得分:0)

你必须解析所有相关的childNodes:

for (CXMLElement *node in nodes) {

    for (CXMLNode *childNode1 in [node children]) {

        NSString *nodeName1 = [childNode1 name]; // should contain item_1 in first iteration
        NSString *nodeValue1 = [[childNode1 stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // should contain 'text' in first iteration

        NSLog(@"NodeName1, NodeValue1: %@, %@", nodeName1, nodeValue1);


        if ([[childNode1 name] isEqualToString:@"title"]) {

            NSLog(@"I am here!");
        [item setObject:nodeValue1 forKey:nodeName1]; 
        [res addObject:item];

        }


        for (CXMLNode *childNode2 in [childNode1 children]) {

        //  NSString *nodeName2 = [childNode2 name]; // should contain item_1 in first iteration
        //  NSString *nodeValue2 = [[childNode2 stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // should contain 'text' in first iteration

        //  NSLog(@"NodeName2, NodeValue2: %@, %@", nodeName2, nodeValue2);

            for (CXMLNode *childNode3 in [childNode2 children]) {

                //NSString *nodeName3 = [childNode3 name]; // should contain item_1 in first iteration
                //NSString *nodeValue3 = [[childNode3 stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // should contain 'text' in first iteration

                //NSLog(@"NodeName3, NodeValue3: %@, %@", nodeName3, nodeValue3);

                for (CXMLNode *childNode4 in [childNode3 children]) {

                //  NSString *nodeName4 = [childNode4 name]; // should contain item_1 in first iteration
                //  NSString *nodeValue4 = [[childNode4 stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // should contain 'text' in first iteration

                //  NSLog(@"NodeValue4: %@", nodeValue4);

                    for (CXMLNode *childNode5 in [childNode4 children]) {

                    //  NSString *nodeName5 = [childNode5 name]; // should contain item_1 in first iteration
                    //  NSString *nodeValue5 = [[childNode5 stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; // should contain 'text' in first iteration

                    //  NSLog(@"NodeName5, NodeValue5: %@, %@", nodeName5, nodeValue5);

                    }
                }

            }

        }

    }


    [item release];
}