NSXMLDocument, поиск с помощью узловForXPath: - PullRequest
3 голосов
/ 08 ноября 2011

Мне нужно поискать в HTML-документе две конкретные строки текста в какао.Я создаю NSXMLDocument с веб-страницей: Пример страницы Затем я пытаюсь найти в нем название приложения и URL-адрес значка.В настоящее время я использую этот код для поиска определенных строк:

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"

Я свободно следую этому учебнику .

Я также попробовал это без всех символов @ в xPath, и он также возвращаетошибка.Мой синтаксис явно не подходит для xPath.Какой будет основной синтаксис для этого пути.Я видел множество примеров с базовым деревом XML, но не с HTML.

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Я подозреваю, что это та часть, где у вас есть тест для двух атрибутов

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

Попробуйте изменить его на:

/div[@id='title'][@class='intro has-gcbadge']/h1";
0 голосов
/ 09 ноября 2011

Дополнительные вопросы ОП (из комментариев):

, но мне нужно изменить возвращаемые строки.Для первой строки я получаю "<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)
...