我需要在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。
答案 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)