2016-04-20 2 views
2

Я хочу, чтобы получить URL изображения с этой XML:Как получить данные из HTML-тега внутри XML тега -

<description> 
<![CDATA[ 
<div><a href='http://www.ynet.co.il/articles/0,7340,L-4794118,00.html'><img src='http://images1.ynet.co.il/PicServer4/2016/04/20/6955445/small2.jpg' alt='null' title='null' border='0' width='100' height='56'></a></div>בפוליטיקה, בכלכלה, בביטחון, במשפט, בתרבות, באקדמיה. המתח העדתי עדיין איתנו בכל פינה. למה הגיעו כל כך מעט מזרחיים למוקדי הכוח בישראל? הנתונים המלאים, הניתוח והפרשנויות יתפרסמו ב-ynet בחג. צפו בהצצה 
]]> 
</description> 

Это мой код. Я получил пустой массив, что не так с моим кодом и каково решение моей проблемы.

class ImageParser: NSObject, NSXMLParserDelegate{ 

    var itemsStarted = false; 
    var descriptionStarted = false; 
    var divStarted = false; 
    var aStarted = false; 
    var inImage = false; 
    var images:[String] = []; 

    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
     if(elementName == "item"){ 
      itemsStarted = true; 
     } 

     if(itemsStarted && elementName == "description"){ 
      descriptionStarted = true; 
     } 

     if(descriptionStarted && elementName == "div"){ 
      divStarted = true; 
     } 

     if(divStarted && elementName == "a"){ 
      inImage = true; 
     } 

     if(inImage && elementName == "img"){ 
      images.append(attributeDict["src"]!); 
     } 
    } 

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
     if(elementName == "img"){ 
      inImage = false; 
     } 
    } 
    } 
+0

Возможный дубликат [Использование NSXMLParser с CDATA] (http://stackoverflow.com/questions/1095782/using-nsxmlparser-with-cdata) – JAL

+0

Вы можете показать мне, как использовать найденную функцию CDATA в swift? Я хочу извлечь URL-адрес изображения из этого блока –

+1

@JAL: Не дубликат, так как сообщение, на которое вы ссылаетесь, находится в Obj-C, а не быстро ... Ответ там вроде как. –

ответ

2

NSXMLParser игнорирует все внутри CDATA, так что если ваш CDATA содержит допустимые теги XML, что вам нужно сделать, это основно запускается еще один экземпляр парсера на текст внутри CDATA.

это может помочь https://github.com/hunkier/XMLParser-Swift/blob/master/XMLParser.swift

также попробуйте добавить этот метод в код в быстром 2:

func parser(parser: NSXMLParser!, foundCDATA CDATABlock: NSData!) { 
      var datastring = String(CDATABlock: NSData!, encoding: NSUTF8StringEncoding); 
} 

Использование NSString вместо String в более ранней версии быстрой ... синтаксис такой же

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