NSXMLDocument,使用nodesForXPath搜索:

时间:2011-11-08 19:13:06

标签: cocoa xpath xquery nsxmldocument

我需要在HTML文档中搜索cocoa中的两个特定文本字符串。 我正在使用网页创建NSXMLDocument:Page Example 然后我试图搜索它的应用程序标题,以及图标的网址。我目前正在使用此代码搜索特定字符串:

NSString *xpathQueryStringTitle = @"//div[@id='desktopContentBlockId']/div[@id='content']/div[@class='padder']/div[@id='title' @class='intro has-gcbadge']/h1";
NSString *xpathQueryStringIcon = @"//div[@id='desktopContentBlockId']/div[@id='content']/div[@class='padder']/div[@id='left-stack']/div[@class='lockup product application']/a";
NSArray *titleItemsNodes = [document nodesForXPath:xpathQueryStringTitle error:&error];
if (error)
    {
        [[NSAlert alertWithError:error] runModal];
        return;
    }
error = nil;
NSArray *iconItemsNodes = [document nodesForXPath:xpathQueryStringIcon error:&error];
    if (error)
    {
        [[NSAlert alertWithError:error] runModal];
        return;
    }

当我尝试搜索这些字符串时,我收到错误: “XQueryError:3 - ”无效令牌(@) - ./*/div[@id='desktopContentBlockId']/div[@id='content']/div[@class='padder']/div[@id ='title'@ class ='intro has-gcbadge'] / h1“at line:1”

我正在松散地关注这个tutorial

我在没有xPath中的所有@符号的情况下尝试了这个,并且它也返回了一个错误。我的语法对于xPath来说显然是错误的。这条路径的基本语法是什么?我见过很多基本XML树的例子,但不是html。

2 个答案:

答案 0 :(得分:2)

我怀疑是那个部分接近结束,你有两个属性的测试

/div[@id='title' @class='intro has-gcbadge']/h1";

尝试将其更改为:

/div[@id='title'][@class='intro has-gcbadge']/h1";

答案 1 :(得分:0)

OP的其他问题(来自评论):

  

但我需要修改返回的字符串。对于第一个字符串,我得到   "<h1>App Title</h1>,我将添加什么来获取内部的文本   <h1>

使用

/div[@id='title' and @class='intro has-gcbadge']/h1/text()

或使用:

string(/div[@id='title' and @class='intro has-gcbadge']/h1)
  

在第二个字符串上,我得到整个<img width="111" src="link">如何从src标记返回链接值?

使用

YorSecond-Not-Shown-Expression/@src

或使用:

string(YorSecond-Not-Shown-Expression/@src)