0

私の問題は、sendXML の先頭に複数のブラケットがあることです。

> sendXML: <<<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Table_info><table_id>1</table_id><action_id>3</action_id><Bestellliste><item><categorie>getraenke</categorie><item_id>102</item_id><menge>3</menge></item>item><categorie>getraenke</categorie><item_id>101</item_id><menge>2</menge></item>/Bestellliste></Table_info>

ただし、次のようにする必要があります。

sendXML: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Table_info><table_id>1</table_id><action_id>3</action_id><Bestellliste><item><categorie>getraenke</categorie><item_id>102</item_id><menge>3</menge></item><item><categorie>getraenke</categorie><item_id>101</item_id><menge>2</menge></item></Bestellliste></Table_info>

私のコード:

NSMutableArray * objectAttributes = [NSMutableArray arrayWithCapacity:100];

NSString *headerXML = [NSString stringWithFormat:
                                 @"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
                                 "<Table_info>"
                                 "<table_id>1</table_id>"
                                 "<action_id>3</action_id>"
                                 "<Bestellliste>"];

NSMutableArray *bodyXML = [NSMutableArray arrayWithCapacity:200];

NSString *endXML = [NSString stringWithFormat:
                             @"</Bestellliste>"
                             "</Table_info>"];

for(int i=0, j=0; i<getraenkeArray.count; i++)
{
    [objectAttributes addObject:[[getraenkeArray objectAtIndex:i] categorie]];
    [objectAttributes addObject:[[getraenkeArray objectAtIndex:i] item_id]];
    [objectAttributes addObject:[[getraenkeArray objectAtIndex:i] menge]];

    [bodyXML addObject:[NSString stringWithFormat:
                        @"<item>"
                        "<categorie>%@</categorie>"
                        "<item_id>%@</item_id>"
                        "<menge>%@</menge>"
                        "</item>",
               [objectAttributes objectAtIndex:j],
               [objectAttributes objectAtIndex:j+1],
               [objectAttributes objectAtIndex:j+2]]];
    j=j+3;
}


NSMutableString *sendXML = [NSMutableString stringWithCapacity:500];
int i=0;

[sendXML insertString: endXML atIndex: 0];  // Final-XML

// If no object is in getraenkeArray, bodyXML gets an empy standard-string
if (getraenkeArray.count == 0) {
    [bodyXML addObject:[NSString stringWithFormat:
                        @"<item>"
                        "<categorie></categorie>"
                        "<item_id></item_id>"
                        "<menge></menge>"
                        "</item>"]];
    [sendXML insertString: [bodyXML objectAtIndex:i] atIndex: i+1];
    NSLog(@"if");
}
else
{
    for(i=0; i<(getraenkeArray.count); i++)
    {
        [sendXML insertString: [bodyXML objectAtIndex:i] atIndex: i+1]; NSLog(@"i: %d", i);
    }
    NSLog(@"else");
}

[sendXML insertString: headerXML atIndex: i];
NSLog(@"XML: %@", sendXML);
4

1 に答える 1

1

配列からsendXMLにアイテムを挿入するforループでは、文字オフセットであるインデックスi + 1に挿入しているため、2番目の要素は最初の文字列の文字1に挿入されています。最初の<、したがって悪い結果が得られます。

appendString:文字列に文字列を次々とsendXML挿入するか、挿入する必要がある場合は実際の挿入位置を取得するかのいずれかを試してください。

于 2013-04-12T10:15:45.593 に答える