我的问题是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);

最佳答案

在将数组中的项目插入到sendXML中的for循环中,您将在索引i + 1处插入,这是一个字符偏移量,因此第二个元素将插入在第一个字符串的字符1处,紧随其后第一个<,因此结果很差,

如果要在appendString:字符串中依次串连,请尝试使用sendXML,或者如果需要插入,请获取真实的插入位置。

关于ios - 用XML字符串填充数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15968373/

10-09 07:11
查看更多