Frage

Ich versuche den folgenden XML mit TBXML zu analysieren. Ich möchte ein Array erstellen, das alle Element -Tag -Werte enthält. Wie kann ich die "Element" -Tags durchqueren?

<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>

War es hilfreich?

Lösung

Hier ist ein Beispiel -Code, der den XML aus einer Datei liest. Sie können es optimieren, um ein verfügbares NSString/NSData -Objekt zu verwenden. Notiz Da wir nicht die genauen potenziellen Formate kennen, die Ihre Seife zurückgeben können, ist dies nicht sehr robust. Es ist nur eine Lösung, die für die von Ihnen bereitgestellten Daten funktioniert.

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;
}

Und die Ausgabe:

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

Mit diesem sollte es ziemlich einfach sein, eine zu erstellen NSArray und speichern Sie die Artikel oder erstellen Sie eine NSArray für jedes Gebietsschema und trennen Sie die Gegenstände auf diese Weise. (Speichern Sie sie in einem NSDictionary durch das Gebietsschema gekeutet.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top