J'ai du mal à comprendre comment utiliser l'objet DOMElement en PHP. J'ai trouvé ce code, mais je ne suis pas vraiment sûr qu'il s'applique à moi:
$dom = new DOMDocument();
$dom->loadHTML("index.php");
$div = $dom->getElementsByTagName('div');
foreach ($div->attributes as $attr) {
$name = $attr->nodeName;
$value = $attr->nodeValue;
echo "Attribute '$name' :: '$value'<br />";
}
Fondamentalement, ce dont j'ai besoin est de rechercher dans le DOM un element
avec un id
particulier, après quoi je dois extraire un attribute
non standard (c'est-à-dire un que j'ai fait et mettre en place avec JS) afin que je puisse voir la valeur de cela. La raison en est que j'ai besoin d'une pièce du $_GET
et un morceau qui est dans le HTML basé sur une redirection. Si quelqu'un pouvait simplement expliquer comment j'utilise DOMDocument à cette fin, ce serait utile. J'ai vraiment du mal à comprendre ce qui se passe et comment l'appliquer correctement, car je ne le fais clairement pas correctement.
EDIT (Où je suis basé sur un commentaire):
Voici mes lignes de code 4-26 pour référence:
<div id="column_profile">
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/peripheral/profile.php");
$searchResults = isset($_GET["s"]) ? performSearch($_GET["s"]) : "";
$dom = new DOMDocument();
$dom->load("index.php");
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
foreach ($div->attributes as $attr) {
$name = $attr->nodeName;
$value = $attr->nodeValue;
echo "Attribute '$name' :: '$value'<br />";
}
}
$div = $dom->getElementById('currentLocation');
$attr = $div->getAttribute('srckey');
echo "<h1>{$attr}</a>";
?>
</div>
<div id="column_main">
Voici le message d'erreur que je reçois:
Warning: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in ../public_html/index.php, line: 26 in ../public_html/index.php on line 10
Fatal error: Call to a member function getAttribute() on a non-object in ../public_html/index.php on line 21
getElementsByTagName
vous renvoie une liste d'éléments, vous devez donc d'abord parcourir les éléments, puis leurs attributs.
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
foreach ($div->attributes as $attr) {
$name = $attr->nodeName;
$value = $attr->nodeValue;
echo "Attribute '$name' :: '$value'<br />";
}
}
Dans votre cas, vous avez dit que vous aviez besoin d'un identifiant spécifique. Ceux-ci sont censés être uniques, donc pour ce faire, vous pouvez utiliser (note getElementById
peut ne pas fonctionner sauf si vous appelez $dom->validate()
d'abord):
$div = $dom->getElementById('divID');
Ensuite pour obtenir votre attribut:
$attr = $div->getAttribute('customAttr');
[~ # ~] modifier [~ # ~] : $dom->loadHTML
lit simplement le contenu du fichier, il ne les exécute pas . index.php
Ne sera pas exécuté de cette façon. Vous devrez peut-être faire quelque chose comme:
$dom->loadHTML(file_get_contents('http://localhost/index.php'))
Vous n'aurez pas accès au HTML si la redirection provient d'un serveur externe. Permettez-moi de le dire ainsi: le DOM n'existe pas au moment où vous essayez de l'analyser. Ce que vous pouvez faire est de passer le texte à un analyseur DOM, puis de manipuler les éléments de cette façon. Ou la meilleure façon serait de l'ajouter comme autre variable GET.
EDIT: Savez-vous également que le client peut changer le HTML et le faire passer ce qu'il veut? (Utilisation d'un outil comme Firebug)