Domanda

sto cercando di analizzare il seguito XML utilizzando tbXml. Voglio creare un array che contiene tutti i valori delle variabili voce. Come posso attraversare attraverso i tag "voce"?

<root>
<item>
<northeast_area>
<item>
<new_england_north xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[8]">
    <item xsi:type="xsd:string">boston s, ma</item>
    <item xsi:type="xsd:string">providence, ri</item>
    <item xsi:type="xsd:string">boston, ma </item>
    <item xsi:type="xsd:string">portland, me</item>
    <item xsi:type="xsd:string">boston, ma </item>
    <item xsi:type="xsd:string">boston central</item>
    <item xsi:type="xsd:string">boston north, ma</item>
    <item xsi:type="xsd:string">boston south, ma</item>
</new_england_north>
</item>

<item>
<upstate_new_york xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[6]">
    <item xsi:type="xsd:string">binghampton, ny</item>
    <item xsi:type="xsd:string">rochester, ny</item>
    <item xsi:type="xsd:string">albany s, ny</item>
    <item xsi:type="xsd:string">syracuse, ny</item>
    <item xsi:type="xsd:string">albany, ny</item>
    <item xsi:type="xsd:string">buffalo, ny</item>
</upstate_new_york>
</item>
</northeast_area>
</item>

È stato utile?

Soluzione

Ecco un pezzo di codice di esempio che legge il codice XML da un file. È possibile modificarlo per utilizzare un oggetto NSString / NSData disponibili. Nota che dal momento che non conosciamo le esatte possibili formati che le chiamate SOAP possono tornare, questo non è molto robusto, E 'solo una soluzione che funziona per i dati che hai fornito.

int main (int argc, const char * argv[])
{

    @autoreleasepool {
        NSString* path = @"/Path/To/Your/File";
        NSData *contents = [[NSFileManager defaultManager] contentsAtPath:path];
        TBXML *xml = [TBXML tbxmlWithXMLData:contents];

        TBXMLElement *rootElement = [xml rootXMLElement];

        TBXMLElement *rootItemElem = [TBXML childElementNamed:@"item" parentElement:rootElement];

        while (rootItemElem != nil) {
            TBXMLElement *areaElement = rootItemElem->firstChild;

            while (areaElement != nil) {
                TBXMLElement *areaItemElement = [TBXML childElementNamed:@"item" parentElement:areaElement];
                while (areaItemElement != nil) {
                    TBXMLElement *localeItem = areaItemElement->firstChild;
                    NSLog(@"Checking locale %s", localeItem->name);
                    TBXMLElement *specificItem = [TBXML childElementNamed:@"item" parentElement:localeItem];
                    while (specificItem != nil) {
                        NSLog(@"Item with value: %@", [TBXML textForElement:specificItem]);
                        specificItem = [TBXML nextSiblingNamed:@"item" searchFromElement:specificItem];
                    }

                    areaItemElement = [TBXML nextSiblingNamed:@"item" searchFromElement:areaItemElement];
                }

                areaElement = areaElement->nextSibling;
            }

            rootItemElem = [TBXML nextSiblingNamed:@"item" searchFromElement:rootItemElem];
        }

    }
    return 0;
}

e l'output:

2011-10-19 08:20:40.321 Testing[14768:707] Checking locale new_england_north
2011-10-19 08:20:40.323 Testing[14768:707] Item with value: boston s, ma
2011-10-19 08:20:40.323 Testing[14768:707] Item with value: providence, ri
2011-10-19 08:20:40.324 Testing[14768:707] Item with value: boston, ma
2011-10-19 08:20:40.324 Testing[14768:707] Item with value: portland, me
2011-10-19 08:20:40.325 Testing[14768:707] Item with value: boston, ma
2011-10-19 08:20:40.326 Testing[14768:707] Item with value: boston central
2011-10-19 08:20:40.326 Testing[14768:707] Item with value: boston north, ma
2011-10-19 08:20:40.327 Testing[14768:707] Item with value: boston south, ma
2011-10-19 08:20:40.327 Testing[14768:707] Checking locale upstate_new_york
2011-10-19 08:20:40.328 Testing[14768:707] Item with value: binghampton, ny
2011-10-19 08:20:40.328 Testing[14768:707] Item with value: rochester, ny
2011-10-19 08:20:40.329 Testing[14768:707] Item with value: albany s, ny
2011-10-19 08:20:40.329 Testing[14768:707] Item with value: syracuse, ny
2011-10-19 08:20:40.330 Testing[14768:707] Item with value: albany, ny
2011-10-19 08:20:40.330 Testing[14768:707] Item with value: buffalo, ny

Con questo, dovrebbe essere abbastanza semplice per creare un NSArray e memorizzare gli oggetti, o creare un NSArray per ogni lingua e separare gli elementi in quel modo. (La conservazione in un NSDictionary calettato dal locale.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top