特定の std html クラスの html 要素をコンテンツで埋めることを目指しています
この回答には、かなり複雑な連結 xpath クエリがあります: Using DOMDocument to extract from HTML document by class
このクラス拡張は、html を適切に取得して埋めます: https://gist.github.com/j0shua/945507
これは私が使用しているhtmlの例です:
<!-- actual content of the page box -->
<div class="masterWidthSet mainContent">
<div class="mainPageContent">
<script type="text/javascript" src="/email_js.js"></script>
<b>Contact us all at the same time...</b><br/>
<div class="messageSent">Thank you for contacting us, we will get back to you as soon as possible.</div>
<table class="contactForm">
<tr><td class="title">Name</td><td class="description"><input type="text" id="sendName" class="text" placeholder="Your name..."></td></tr>
<tr><td class="title">Number (optional)</td><td class="description"><input type="text" id="phoneNo" class="text"placeholder="Your number..."></td></tr>
<tr><td class="title">Email</td><td class="description"><input type="text" id="email" class="text"placeholder="Your email..."></td></tr>
<tr><td class="title">Message</td><td class="description"><textarea id="message" class="text"placeholder="Your message..."></textarea></td></tr>
<tr><td></td><td class="description"><input type="button" class="submit" value="Send us you message..." onclick="sendMessage()"/><span class="description messageStatus" id="messageStatus"></span></td></tr>
</table>
</div>
</div>
要素の innHTML は、単一のクラス「 mainPageContent」で簡単に取得できます。
require_once WEBROOT_PRIVATE.'scripts/JSLikeHTMLElement.php';
$dom = new \DOMDocument();
$dom->registerNodeClass('DOMElement', 'JSLikeHTMLElement');
$dom->loadHTML( file_get_contents( $file['local_path'] ) );
$xpath = new \DOMXPath($dom);
$elem = $xpath->query('//*[@class="mainPageContent"]')->item(0);
echo $elem->innerHTML;
しかし、複数のクラスを持つ要素をターゲットにしようとするとすぐに、null が返されます (クエリが完全一致を探しているためだと思います)。
$elem = $xpath->query('//*[@class="mainContent"]')->item(0);
だから私は一番上の投稿から連結クエリを使用しようとしましたが、「メンバー関数 item() への呼び出し」を取得します:
$elem = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' mainContent ')")->item(0);
だから私はこれを試しました:
$elem = $xpath->query('//*[class~="mainContent"]')->item(0);
問題は、item(0) がエラーになるたびに発生します。
非オブジェクトでのメンバー関数 item() の呼び出し
この男は、私が試した方法はうまくいくはずだと言っています..xpathでcssクラスを選択する
誰かが私を正しい方向に向けることができますか?
ありがとう、J