3

cocoa の 2 つの特定のテキスト文字列を HTML ドキュメントから検索する必要があります。Web ページで NSXMLDocument を作成しています: Page Example 次に、アプリのタイトルとアイコンの 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 はそうではありませんでした。

4

2 に答える 2

2

2つの属性のテストがあるのはその近くの部分だと思います

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

次のように変更してみてください。

/div[@id='title'][@class='intro has-gcbadge']/h1";
于 2011-11-08T19:48:51.870 に答える
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)

2番目の文字列で、タグ<img width="111" src="link">からリンクの値を返す方法全体を取得しますか?src

使用

YorSecond-Not-Shown-Expression/@src

または使用:

string(YorSecond-Not-Shown-Expression/@src)
于 2011-11-09T05:12:23.263 に答える