我一直试图通过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)
因此,解析XHTML
文档时没有任何错误,XPath query
也没有错误。此文档还有两个根目录下的子项(“body”标签和“head”标签)。但问题是它无法找到“img”标签。我试图用其他可能的标签名称(例如p,a,甚至是body,head)替换“img”,根本没有运气。
有人可以帮我吗?
P.S.
实际上原始文档是一个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];
仍然没有运气,找不到任何结果。
如果您将xhtml加载到Chrome浏览器并输入// img xpath,则会找到img标记。XPath expresion没有问题 - 它可能是因为你的库不理解//快捷方式吗?尝试使用/ descendant :: img,然后看看会发生什么。 – drew
根据@drew的评论,尝试使用绝对XPath来查看您的库是否可以遵循_any_ Xpath,例如。 '/ HTML /体/ P/img'。然后尝试让你更接近的路径,例如。 '/ html // img'正如他所说的Xpath _is_有效,所以它应该可以工作,并且在OxygenXML中进行测试。 – 2013-05-16 01:45:55