Próbowałem parsować dokument XHTML
przez TouchXML
, ale zawsze nie można znaleźć żadnych tagów za pomocą XPath query
.Czy to zapytanie XPath podczas analizowania XHTML jest nieprawidłowe? przy użyciu TouchXML
Poniżej znajduje się 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>
Więc widzimy, istnieje "p" tag "" znacznika i "img" znacznik
co robiłem wtedy jest pokazany jako Kod poniżej:
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]);
wyniki są
error (null)
doc children count = 2
imgNodeArray = 0
error (null)
Tak więc, nie ma żadnego błędu podczas analizowania dokumentu XHTML
i braku błędu dla XPath query
. Również ten dokument ma dwoje dzieci pod nazwą root (tag "body" i tag "head"). Problem polega jednak na tym, że nie można znaleźć znacznika "img". Próbowałem zastąpić "img" innymi możliwymi nazwami znaczników (takimi jak p, a, nawet ciało, głowa), bez żadnego szczęścia.
Czy ktoś może mi w tym pomóc?
P.S.
Właściwie oryginalny dokument to HTML, użyłem klasy CTidy w bibliotece TouchXML, aby najpierw uporządkować kod HTML na XHTML. Powyższy XHTML pochodzi z tych wyników CTidy.
Próbowałem też dodać coś przestrzeni nazw do kwerendy XPath, jak to
NSMutableDictionary *namespaceDict = [NSMutableDictionary dictionary];
[namespaceDict setValue:@"http://www.w3.org/1999/xhtml" forKey:@"xhtml"];
i zmienić zapytanie XPath do
NSArray *imgNodeArray = [doc nodesForXPath:@"//xhtml:img" namespaceMappings:namespaceDict error:&error];
nadal nie ma szczęścia, nie można znaleźć żadnych wyników.
Po załadowaniu xhtml do przeglądarki Chrome i wprowadzeniu // img xpath, znajduje się znacznik img.Nie ma nic złego w wyrażeniu XPath - czy może być tak, że twoja biblioteka nie rozumie // skrótu? Spróbuj użyć/descendant :: img i zobacz, co się wtedy stanie. – drew
Po komentarzu @drew spróbuj użyć bezwzględnego XPath, aby sprawdzić, czy twoja biblioteka może śledzić _any_ Xpath, np. '/ html/body/p/img'. Następnie spróbuj ścieżek, które Cię zbliżą, np. '/ html // img' Jak powiedział, Xpath _is_ valid, więc powinno działać, i sprawdza się w OxygenXML. –