Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 2解析HTML并查找特定节点_Swift_Swift2 - Fatal编程技术网

Swift 2解析HTML并查找特定节点

Swift 2解析HTML并查找特定节点,swift,swift2,Swift,Swift2,使用Kanna导入,我目前正在使用以下代码解析html: if let doc = Kanna.HTML(url: NSURL(string: "https://en.wikipedia.org/wiki/Data")!, encoding: NSUTF8StringEncoding) { // Search for nodes by XPath for link in doc.xpath("/html/head...") { prima

使用Kanna导入,我目前正在使用以下代码解析html:

if let doc = Kanna.HTML(url: NSURL(string: "https://en.wikipedia.org/wiki/Data")!, encoding: NSUTF8StringEncoding) {

        // Search for nodes by XPath
        for link in doc.xpath("/html/head...") {
            primaryDisplay.text!=link.text!
            print(link.text)
        }
    }
}
我想知道如何在html页面中/上识别特定的“节点”(不确定这是否是正确的术语),以解析我想要的特定数据

这是一张我想知道的图片。。。我想


一个简单的方法就是使用

试试这个:

do{
            let html = "<!DOCTYPE html>" +
                "<html>" +
                "<head>" +
                "<title>Some webpage</title>" +
                "</head>" +
                "<body>" +
                "<p class='normal'>This is the first paragraph.</p>" +
                "<p class='special'><b>this is in bold</b></p>" +
                "</body>" +
            "</html>";

            let doc: Document = try SwiftSoup.parse(html)
            let els: Elements = try doc.getElementsByClass("special")
            let special: Element? = els.first()//get first element
            print(try special?.text())//"this is in bold"
            print(special?.tagName())//"p"
            print(special?.child(0).tag().getName())//"b"

        }catch Exception.Error(let type, let message)
        {
            print("")
        }catch{
            print("")
        }
do{
让html=“”+
"" +
"" +
“一些网页”+
"" +
"" +
“这是第一段。

”+ “

这是粗体的

”+ "" + ""; let doc:Document=try swifsoup.parse(html) 让els:Elements=try doc.getElementsByClass(“特殊”) let special:Element?=els.first()//获取第一个元素 打印(请尝试特殊?.text())/“此为粗体” 打印(特殊?.tagName())/“p” 打印(特殊?.child(0.tag().getName())/“b” }捕获异常。错误(let类型,let消息) { 打印(“”) }抓住{ 打印(“”) }
您还应该看看xpath/xquery——它是一种专门用于遍历和查询XML的语言,因此适用于XHTML和HTML。XHTML基本上是格式良好的HTML

假设您的计算机上安装了xpath/xquery解析器,您可以

  • 获取文档中所有p元素的列表://p
  • 获取类为“special”的所有p元素的列表://p[@class='special']
XQuery增加了使用称为FLWOR的类似SQL的语法查询文档的能力


对html使用此解析器或任何其他解析器的困难在于,html的格式通常不好。这意味着每个开始标记都没有结束标记。这使得任何类型的解析都有些粗略,因为解析器可能无法理解HTML隐含的层次结构。

我不建议您解析您不拥有的HTML。因为它可以随时更改,解析器将返回nil@Anton这在短期内不应该是一个问题,但谢谢你的建议。@Anton如果你写得好,那就没有问题了problem@OP我没有得到你想要的。。。哪些节点?只是某种类型的?您已经有了xpath。问题是什么?抱歉,我正在尝试获取更具体的xpath。。。因此,问题实际上是询问swift中特定xpath的示例