собираюсь получить значение из ответа xml при разборе, но я не могу получить значение

Ниже приведен код ответа сервера:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><SendCardDetailsResponse xmlns="http://tempuri.org/"><SendCardDetailsResult><ROOT xmlns=""><DocumentElement><res-auth><auth-data count='1' ><**attribute name='OTP1'** length='6' type='N' label='OTP' prompt='Please enter OTP as send to your mobile.'/></auth-data></res-auth></DocumentElement></ROOT></SendCardDetailsResult></SendCardDetailsResponse></soap:Body></soap:Envelope>

Мне нужно получить имя атрибута, которое является «OTP1», как я могу получить значение имени атрибута, любая помощь будет заметна


person Ravi Sharma    schedule 20.01.2012    source источник
comment
это не XML, я думаю. Проверьте ниже   -  person Yama Puvar    schedule 20.01.2012
comment
‹?xml version=1.0 encoding=ISO-8859-1?› ‹shiporder orderid=889923 xmlns:xsi=w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation=shiporder.xsd› ‹orderperson›John Smith‹/orderperson› ‹shipto› ‹name›Ola Nordmann‹/name› ‹address›Langgt 23‹ /адрес› ‹город›4000 Ставангер‹/город› ‹страна›Норвегия‹/страна› ‹/shipto› ‹пункт› ‹название›Empire Burlesque‹/название› ‹примечание›Special Edition‹/примечание› ‹количество›1‹ /количество› ‹цена›10.90‹/цена› ‹/предмет› ‹предмет› ‹название›Hide your heart‹/название› ‹количество›1‹/количество› ‹цена›9.90‹/цена›   -  person Yama Puvar    schedule 20.01.2012
comment
с помощью класса nsxmlparser и метода делегата синтаксического анализа   -  person Ravi Sharma    schedule 20.01.2012


Ответы (1)


Я бы использовал что-то вроде этого:

-(NSString*) getAttribute{
    NSString *attribute = @"";
    NSString *xmlString = @"";//put the XML in this NSString
    int endOfSrc = [xmlString rangeOfString:@"\"><attribute name='"].location+[xmlString rangeOfString:@"\"><attribute name='"].length;
    int borderPos = [xmlString rangeOfString:@"' length='"].location;
    if(borderPos != NSNotFound){
        NSRange range;
        range.location = endOfSrc;
        range.length = borderPos - endOfSrc;
        attribute = [xmlString substringWithRange:range];
        return attribute;
    }
    return @" ";
}

Здесь нет ничего сложного, если возникнут вопросы по коду, просто посмотрите документацию по функциям, которые я использовал здесь. может есть более эффективные способы, не знаю. Это работает как шарм для меня.

person Dumoko    schedule 20.01.2012
comment
@dumoko..спасибо за ваш ответ, я использую этот код, но я путаюсь с rangeOfString, я должен указать значение диапазона? вы объясните мне, как использовать этот метод.... - person Ravi Sharma; 20.01.2012
comment
rangeofString дает вам значение NSRange с двумя полями: индекс, где \›‹attribute name=’ начинается (местоположение), и его длина, поэтому endOfSrc будет иметь индекс, где заканчивается \›‹attribute name=’ и начинается атрибут. borderPos просто находит, где заканчивается атрибут. Итак, мы знаем индекс, где атрибут начинается и где он заканчивается. Так что нам просто нужно подстроку между этими двумя индексами. И кстати, если мой ответ помог вам, не могли бы вы проверить его как принятый? - person Dumoko; 20.01.2012