TouchXML
でXHTML
のドキュメントを解析しようとしていますが、常にXPath query
でタグを見つけることができません。以下はXHTMLの解析でこのXPathクエリが間違っていますか? TouchXMLを使用して
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/[email protected]/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」タグ、「」タグと「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)
であります210
したがって、XHTML
のドキュメントを解析する際にエラーは全くなく、XPath query
のエラーはありません。また、このドキュメントにはルート( "body"タグと "head"タグ)の下に2つの子があります。しかし、問題はそれが "img"タグを見つけることができないということです。私は "img"を他の可能なタグ名(p、a、even body、headなど)に置き換えようとしました。運が全くありません。
誰かが私を助けることができますか?
P.S.
実際に元のドキュメントはHTMLですが、TouchXMLライブラリのCTidyクラスを使用してHTMLをXHTMLに整理しています。上記のXHTMLは、そのCTidyの結果から来たものです。
また、私はこの
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];
にXPathクエリを変更しようとしましたまだ運は、任意の結果を見つけることができません。
xhtmlをクロムブラウザにロードして// img xpathを入力すると、imgタグが配置されます。あなたのXPathの表現に間違いはありません - あなたのライブラリが//ショートカットを理解できないかもしれませんか?/descendant :: imgを使用して、何が起こるかを見てください。 – drew
@drewのコメントの後に、あなたのライブラリが_any_Xpathに従うことができるかどうかを確認するために、絶対XPathを使ってみてください。 '/ html/body/p/img'となります。次に、あなたを近づけるパスを試してください。 '/ html // img' Xpathは有効であると言っていたので、それはうまくいくはずです。また、OxygenXMLでテストしたときに動作します。 –