Я пытался разобрать 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
нет никаких ошибок. Также у этого документа есть два дочерних элемента под корнем (тег "body" и тег "head"). Но проблема в том, что он не может найти тег «img». Я попытался заменить img другими возможными именами тегов (такими как p, a, even body, head), безуспешно.
Кто-нибудь может мне здесь помочь?
P.S.
На самом деле исходный документ - это HTML, я использовал класс CTidy в TouchXML lib, чтобы сначала привести 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];
По-прежнему не повезло, не могу найти никаких результатов.
/html/body/p/img
. Затем попробуйте пути, которые вам ближе, например./html//img
Как он сказал, Xpath является действительным, поэтому он должен работать и работает при тестировании в OxygenXML. - person   schedule 16.05.2013