PHPでDOMElementオブジェクトを使用する方法を理解するのに非常に時間がかかっています。私はこのコードを見つけましたが、それが私に当てはまるか本当にわかりません:
$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 />";
}
基本的に必要なのは、DOMで特定のelement
を使用してid
を検索することです。その後、非標準のattribute
(つまり、作成したもの)を抽出する必要がありますJSを使用して、その価値を確認できます。その理由は、$_GET
と、リダイレクトに基づくHTMLに含まれる1つの要素。誰かがこの目的でDOMDocumentをどのように使用するかを説明できれば、それは役に立ちます。私は明らかに正しく行っていないため、何が起こっているのか、それを適切に実装する方法を理解するのに本当に苦労しています。
編集(コメントに基づく場所):
これは参考のために私のコード行4-26です。
<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">
ここに私が得ているエラーメッセージがあります:
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
は要素のリストを返すため、最初に要素をループし、次にその属性をループする必要があります。
_$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
foreach ($div->attributes as $attr) {
$name = $attr->nodeName;
$value = $attr->nodeValue;
echo "Attribute '$name' :: '$value'<br />";
}
}
_
あなたの場合、あなたは特定のIDが必要だと言いました。これらは一意であることが想定されているため、これを行うには次のように使用できます(注 getElementById
は、最初に$dom->validate()
を呼び出さない限り機能しない可能性があります)。
_$div = $dom->getElementById('divID');
_
次に、属性を取得します。
_$attr = $div->getAttribute('customAttr');
_
[〜#〜] edit [〜#〜]:_$dom->loadHTML
_はファイルの内容を読み取るだけで、実行しません。 _index.php
_はこの方法で実行されません。あなたは次のようなことをしなければならないかもしれません:
_$dom->loadHTML(file_get_contents('http://localhost/index.php'))
_
リダイレクトが外部サーバーからの場合は、HTMLにアクセスできません。言い換えると、DOMは解析しようとしている時点では存在しません。できることは、テキストをDOMパーサーに渡し、要素をそのように操作することです。または、別のGET変数として追加することをお勧めします。
編集:クライアントがHTMLを変更して、必要なものをすべて渡せることも知っていますか? (Firebugなどのツールを使用)