我想从此XML获取图像的URL:

<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;
        }
    }
  }

最佳答案

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);
}

在早期版本的swift中使用NSString代替String ...语法是相同的

关于ios - 如何从HTML标记XML标记内获取数据-,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36752962/

10-09 06:31