2016-08-05 8 views
-1

У меня есть приложение Obj-c, которое работает; теперь это не так. Это часть строки, которую я пытаюсь разобрать:Почему NSScanner не находит первое вхождение целевой строки?

< DIV класс = "PostContent"> < DIV класс = "Статья"> < DIV класс = "Сообщение"> < DIV класс = "PostContent "> < div> < img style =" background-image: url ('http://cdn.openisbn.com/images/no_book_cover.jpg'); border: solid 1px # 383c40; "src =/cover/0345377443_220.jpg width = 220 border = 0 title =" Women Who Run With The Wolves: Myths And Stories of the Wild Woman Archetype "> </div> Авторы: < a href ="/author/Clarissa_Pinkola_Estes/"> Clarissa_Pinkola_Estes /"> Clarissa_Pinkola_Estes/"> Clarissa_Pinkola_Estes /"> Clarissa_Pinkola_Estes/"> Clarissa_Pinkola_Estes /"> Clarissa_Pinkola_Estes/">/Ballantine_Books/"> Ballantine Boo кс </а>

Несколько тысяч символов позже, этот текст появляется:

< DIV класс = "блок" ID = "LayoutColumn_3"> < DIV класс = "blockTop"> </дел > < h2 </h2> < div align = "center"> < a href = "/ isbn/006251380X /"> < img style = "padding: 1px; border: 1px solid # 6c6c6c; background-image: url ('http://cdn.openisbn.com/images/no_book_cover.jpg'); "src =/cover/006251380X_72.jpg width = 72 height = 114 border = 0 title =" Верный садовник: мудрая сказка о том, что никогда не умереть "> </a > < BR> < a href = "/ isbn/006251380X /"> Верный садовник: мудрая сказка о том, что не умеет умереть </a> < BR> < a href = "/ isbn/1604076356 /"> < img style = "padding: 1px; border: 1px solid # 6c6c6c; Фоновое изображение: URL («http://cdn.openisbn.com/images/no_book_cover.jpg»);»

Это мой код, чтобы найти название:

[scanner setScanLocation:0]; 
[scanner setCaseSensitive:NO]; 
[scanner scanUpToString:@" border=0 title=\"" intoString:nil]; // title 
scanner.scanLocation += 17; 
[scanner scanUpToString:@"\">" intoString:&tempString]; 
oTitle.text = tempString; 

То, что происходит это пропускает первое вхождение (Женщины, которые управляют ..) целевой строки и находит второе вхождение (T он Верный Гарднер) и возвращает его, а не первый. Поскольку это использовалось для работы, и я не изменил код, может кто-то сказать мне, почему это не работает и, возможно, предлагает некоторые изменения в коде, чтобы заставить его работать снова? Я бы очень признателен Это!

+0

@rob no, я проверил еще раз, и между * border * и * title не существует двух пробелов, но спасибо за комментарии.Я прочитаю учебник Рэя и посмотрю, легко ли он подходит. : D – SpokaneDude

+0

@Rob, пожалуйста, повторите свой комментарий о двойных пробелах; это была проблема! Я хотел бы дать вам баллы за комментарий. SD – SpokaneDude

ответ

1

Причина это не находит первое вхождение в том, что этот конкретный экземпляр, кажется, есть два пробела между border=0 и title="...":

<img style="..." src=... width=220 border=0 title="Women Who Run With ..."> 

Ваш сканер ищет строку с только одним пробелом.


Лично я бы предложил рассмотреть использование парсера HTML. Это немного сложно в первый раз, когда вы его используете, но это чрезвычайно мощный и гибкий способ анализа HTML и выталкивает вас из сорняков пошагового сканирования ввода. Он предназначен именно для такого рода проблем. См. TFHpple или Ray Wenderlich tutorial on how to parse HTML.

+0

Спасибо, Роб ... мой код был прав; но источник изменился с одного места на двойное пространство ... у вас хорошие глаза! – SpokaneDude

 Смежные вопросы

  • Нет связанных вопросов^_^