5

XHTMLを介してドキュメントを解析しようとしましたTouchXMLが、常に を介してタグを見つけることができませんXPath query

以下は XHTML です。

XHTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <meta name="generator" content=
         "HTML Tidy for Mac OS X (vers 25 March 2009), see www.w3.org" />
      <title></title>
      </head>
   <body>
      <p>
          <a href="http://www.flickr.com/photos/55397648@N00/5987335786/"
             title="casavermeer5.jpg by the style files, on Flickr">
          <img src="http://farm7.static.flickr.com/6127/5987335786_abec990554_o.jpg"
               width="500" height="750" border="0" alt="casavermeer5.jpg" />
          </a>
      </p>
   </body>
</html>

したがって、「p」タグ、「a」タグ、「img」タグがあることがわかります

そのとき私がしたことは、以下のコードとして示されています。

CXHTMLDocument *doc = [[[CXHTMLDocument alloc] initWithXHTMLString:XHTML options:0 error:&error] autorelease];
NSLog(@"error %@", [error localizedDescription]);
NSLog(@"doc children count = %d", [doc childCount]);
NSArray *imgNodeArray = [doc nodesForXPath:@"//img" error:&error];
NSLog(@"imgNodeArray = %d", [imgNodeArray count]);
NSLog(@"error %@", [error localizedDescription]);

結果は

error (null)
doc children count = 2
imgNodeArray = 0
error (null)

XHTMLそのため、ドキュメントの解析にエラーはまったくなく、 XPath query. また、このドキュメントには、ルートの下に 2 つの子 ("body" タグと "head" タグ) があります。しかし、問題は「img」タグが見つからないことです。「img」を他の可能なタグ名 (p、a、body、head など) に置き換えようとしましたが、まったくうまくいきませんでした。

誰かがここで私を助けることができますか?

PS

実際、元のドキュメントは HTML です。TouchXML lib の CTidy クラスを使用して、最初に HTML を XHTML に整理しました。上記の XHTML は、その CTidy の結果から得られたものです。

また、このように、名前空間を XPath クエリに追加しようとしました

NSMutableDictionary *namespaceDict = [NSMutableDictionary dictionary];
[namespaceDict setValue:@"http://www.w3.org/1999/xhtml" forKey:@"xhtml"];

XPath クエリを次のように変更します。

NSArray *imgNodeArray = [doc nodesForXPath:@"//xhtml:img" namespaceMappings:namespaceDict error:&error];

まだ運が悪い、結果を見つけることができません。

4

2 に答える 2

0

これを試してください//img。使用すると、ページ内のどこにあるかに関係なく//、タグが取得されます。階層タグがコードビハインドで少し変更されることがあるため、グローバルであり、あまり具体的ではない方が良い .img
//xhtml:img

于 2014-02-04T09:45:03.417 に答える