Гость
Map
Форумы / iOS [игнор отключен] [закрыт для гостей] / Swift + XML parser / 5 сообщений из 5, страница 1 из 1
03.09.2015, 19:24
    #39042804
hippik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swift + XML parser
Всем привет!

Использую парсер следующим образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
import UIKit
 
class ViewController: UIViewController,NSXMLParserDelegate {
     
    var strXMLData:String = ""
    var currentElement:String = ""
    var passData:Bool=false
    var passName:Bool=false
    var parser = NSXMLParser()
     
    @IBOutlet var lblNameData : UILabel! = nil
    override func viewDidLoad() {
        super.viewDidLoad()
         
        var url:String="http://api.androidhive.info/pizza/?format=xml"
        var urlToSend: NSURL = NSURL(string: url)!
        // Parse the XML
        parser = NSXMLParser(contentsOfURL: urlToSend)!
        parser.delegate = self
         
        var success:Bool = parser.parse()
         
        if success {
            println("parse success!")
             
            println(strXMLData)
             
            lblNameData.text=strXMLData
             
        } else {
            println("parse failure!")
        }
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
     
    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
        currentElement=elementName;
        if(elementName=="id" || elementName=="name" || elementName=="cost" || elementName=="description")
        {
            if(elementName=="name"){
                passName=true;
            }
            passData=true;
        }
    }
     
    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        currentElement="";
        if(elementName=="id" || elementName=="name" || elementName=="cost" || elementName=="description")
        {
            if(elementName=="name"){
                passName=false;
            }
            passData=false;
        }
    }
     
    func parser(parser: NSXMLParser, foundCharacters string: String?) {
        if(passName){
            strXMLData=strXMLData+"\n\n"+string!
        }
         
        if(passData)
        {
            println(string)
        }
    }
     
    func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {
        NSLog("failure error: %@", parseError)
    }
}


в коде просто принцип работы парсера из примера в интернете.

и если у меня текст в теге начинается с числа, то он обязательно после числа заканчивает считывание, как будто тэг закрылся..
т.е.
если у меня допустим XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<news>
  <item>
    <name>1 сентября.</name>
  </item>
  <item>
    <name>Второе сентября.</name>
  </item>
</news>


То у меня в результируещем массиве name будет три значения:
1
сентября
Второе сентября

Подскажите из-за чего так?
Спасибо.
...
Рейтинг: 0 / 0
07.09.2015, 15:28
    #39045031
Alexander Konakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swift + XML parser
hippik,

Выложите куда-нибудь проект на посмотреть.
...
Рейтинг: 0 / 0
07.09.2015, 21:01
    #39045320
hippik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swift + XML parser
dropbox

смотри что он в логи пишет.
...
Рейтинг: 0 / 0
18.09.2015, 13:41
    #39055062
Alexander Konakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swift + XML parser
hippikсмотри что он в логи пишет.
Код: sql
1.
2.
3.
4.
5.
6.
    func parser(parser: NSXMLParser, foundCharacters string: String?) {
        if(passName){
            println("name = "+string!)
        }
        
    }


Sent by a parser object to provide its delegate with a string representing all or part of the characters of the current element.
В примере в правильном направлении сделано - там значение накапливается (хотя и не сбрасывается после вызова didElementEnd). А у тебя просто вывод найденных символов из значения элемента, которое (см.выше) может быть передано парсером по частям. Не веришь - расставь брейкпоинты в этих своих 3 методах и посмотри последовательность их вызовов.
Почему парсер возвращает "Второе сентября" одним куском, а "1 сентября" двумя кусками - не наша забота, так уж он работает.
...
Рейтинг: 0 / 0
24.09.2015, 20:37
    #39060709
hippik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Swift + XML parser
Большое спасибо!
Не внимательный я.
...
Рейтинг: 0 / 0
Форумы / iOS [игнор отключен] [закрыт для гостей] / Swift + XML parser / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]