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 处插入,这是一个字符偏移量,因此第二个元素被插入到第一个字符串的字符 1 处,即紧随其后第一个<,因此给你糟糕的结果,

appendString:如果您希望在sendXML字符串中一个接一个地刺痛,或者如果您需要插入它们,请尝试获取真正的插入位置。

于 2013-04-12T10:15:45.593 回答