J'utilise PHP pour récupérer le contenu pour une URL donnée et XPATH. J'utilise DOMDocument/DOMXPath (avec requête ou évaluation).trop long xpath avec DOMXpath requête/évaluer ne rien retourner
Pour un petit xpath, j'obtiens un résultat correct, mais pour un xpath plus long, cela ne fonctionne pas. (Et ce XPath semble être bon (je les ai obtenus avec Xpather (plugin firefox) et les RETESTÉ avec YQL)
Avez-vous des conseils sur cette curieuse difficulté
Exemple de code:.?
$doc = new DOMDocument();
$myXMLString = file_get_contents('http://stackoverflow.com/questions/4097230/too-long-xpath-with-domxpath-query-evaluate-return-nothing');
@$doc->loadHTML($myXMLString); //@ to suppress warnings
//(good for not ending markup)
$xpath = new DOMXPath($doc);
$fullPath ="/html/body/small/path"; //it works
//$fullPath = "/html/body/full/path/with/lot/of/markup";//does not works
$entries = $xpath->query($fullPath);
//or ->evalutate($fullPath) (same behaviour)
//$entries return DOMNodeList (empty for a long path query,
// correct for a small path query)
je test avec restriction d'attribut, mais il est semble ne pas changer (avec petit XPath cela fonctionne, avec plus il ne fonctionne plus)
Exemple: pour cette page courante:
$fullPath = "/html
/body
/div[4]
/div[@id='content']
/div[@id='question-header']
/h1
/a";//works (retrieve the question title)
$fullPath = "/html
/body
/div[4]
/div[@id='content']
/div[@id='mainbar']
/div[@id='question']
/table
/tbody
/tr[2]
/td[2]
/div[@id='comments-4097230']
/table
/tbody
/tr[@id='comment-4408626']
/td[2]
/div
/a"; //does'nt work
//(should retrieve 'gaby' from comment)
Edit:
-je tester avec SimpleXML lib, et j'ai exactement le même comportement (bon résultat pour les petites requête, rien pour une longue requête).
Edit 2:
je coupe aussi la plus longue XPath en supprimant certains premier élément et cela fonctionne. BTW Je ne comprends vraiment pas pourquoi un chemin xpath correct ne fonctionne pas.
donnez-nous le xml et xpath –
J'ajoute un exemple. – AlphaB