Si votre code contient un opérateur de suppression d'erreur (@
), la première chose à faire est de le supprimer pour voir s'il a effectivement supprimé les erreurs. Dans votre cas, il l'a fait. Beaucoup. Tellement en fait que DOM ne pouvait pas charger le contenu (au moins il ne montrerait pas quand j'ai essayé de sortir le fichier avec saveXML()
). La bonne façon de charger HTML cassé avec DOM est d'utiliser:
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument();
$dom->loadHTMLFile('http://tinyurl.com/35cs96n');
libxml_clear_errors();
chargement de la page avec loadHTMLFile
fera DOM utiliser le module HTMLParser qui est beaucoup plus indulgent au sujet de balisage cassé. Et les appels de la fonction libxml vous éviteront les erreurs. Pour la XPath, essayez @slhck's suggestion. Les éléments a ne sont pas des enfants directs de la table. Il y a des éléments tr et td entre eux. Si vous regardez le code HTML, vous verrez que les éléments a auront tous ids dérivés de l'ID de table eux-mêmes, de sorte que vous pouvez les interroger directement avec
'//a[contains(@id, "SubCategory_SubCategoryDataList")]/@href'
Are 'fopen()' wrappers activés? De plus, je vous recommande de ne pas utiliser le raccourci de l'URL, car il s'agit d'un hiccup inutile pour accéder à la page qui peut être ou ne pas être toujours disponible. – alex
Pouvez-vous expliquer ce que «ne fonctionne pas» signifie exactement? Qu'est-ce qui est supposé arriver qui ne l'est pas? – Oded