Rumah  >  Soal Jawab  >  teks badan

Dapatkan tajuk selepas perenggan pertama: XPath

<p>Saya mahu menambah skema Halaman Soalan Lazim pada tapak web saya. </p> <p>Untuk melakukan ini, saya perlu mencari setiap teg <kod><h2></code><h3></code> Itulah masalahnya. </p> <p>Selepas itu, saya memerlukan teg <kod><p></code> pertama selepas tajuk sebagai jawapan. </p> <p>Hasil akhir sepatutnya kelihatan seperti ini:</p> <pre class="brush:php;toolbar:false;">{ "@type": "Soalan", "name": "Berapa lama masa yang diambil untuk memproses bayaran balik?", "acceptedAnswer": { "@type": "Jawapan", "text": "Kandungan yang diperoleh daripada tag P pertama", "url": "https://www.example.com/answer#anchor_link" } }</pre> <ul> <li><kod>"nama"</kod> yang dimaksudkan ialah teg <kod><h2></kod><h3></kod> </li> <li><kod>"url"</kod> jawapan diperoleh daripada <kod><h2></kod> atau <kod><h3></kod> ; teg Pautan kekal dan pautan sauh. </li> <li><strong>Dua parameter ini telah diselesaikan</strong></li> </ul> <p>Malangnya, saya tidak dapat mengetahui cara mendapatkan teg perenggan pertama selepas teg tajuk.</p> <p>Saya perlu mendapatkan kandungan perenggan pertama dalam baris berikut: </p> <pre class="brush:php;toolbar:false;">"text": "Kandungan yang diperoleh daripada teg P pertama",</pre> <p>Ini ialah kod semasa saya: </p> <pre class="brush:php;toolbar:false;"><?php $content_postid = dapatkan_ID_(); $content_post = get_post($content_postid); $content = $content_post->post_content; $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); libxml_use_internal_errors(true); $dom = DOMDocument baharu; $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); $xp = DOMXPath baharu($dom); $query = "//h2[mengandungi(., '?')] | //h3[mengandungi(., '?')]"; $nodes = $xp->query($query); $timbunan = []; jika ($nod) { $faq_count = count($nodes); $faq_i = 1; bergema ' <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Halaman Soalan Lazim", "mainEntity": ['; foreach($nodes sebagai $node) { echo '{ "@type": "Soalan", "name": "'.$node->nodeValue.'", "acceptedAnswer": { "@type": "Jawapan", "text": "Kandungan yang diperoleh daripada tag P pertama", "url": "'.get_permalink().'#'.$node->getAttribute('id').'" } }'; if ($faq_i != $faq_count): echo ','; } echo ']}</script>'; } ?></pra> <p>Seperti yang anda lihat, saya menggunakan baris kod ini untuk mencari setiap <kod><h2></code> atau <kod>? <h3></code>Tag:</p> <pre class="brush:php;toolbar:false;">$query = "//h2[contains(., '?')] | //h3[contains(., '?')]"; </pra> <p>Saya rasa saya perlukan <kod>$query</code> untuk mencari perenggan selepas tajuk? Tetapi bagaimana untuk menyemak tag pertama selepas tajuk?</p> <p>Saya mencuba pertanyaan tambahan ini: </p> <pre class="brush:php;toolbar:false;">$query2 = "//h2[contains(., '?')]/following-sibling::p[1] | //h3[contains (., '?')]/following-sibling::p[1]";</pre> <p>Tetapi <kod>ikut-adik::</kod> mahupun <kod>mengikut::</kod> Ia sentiasa memaparkan perenggan selepas tajuk terakhir. </p> <p>Adakah saya perlu menyelesaikan pertanyaan pertama? Untuk mengetahui tahap mana saya berada? </p> <p>Berikut ialah contoh <kod>$content_post</code> <pre class="brush:php;toolbar:false;"><h2>Lorem ipsum dolor sit amet?</h2> <p>consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. <p>Veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p> <h3>Duis autem vel eum?</h3> <p>Iris dolor in hendrerit in vulputate velit Esse molestie consequential, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue dulisi&plisis> <h2>Nam liber tempor cum soluta?</h2> <h3>nobis eleifend option congue nihil</h3> <p>imperdiet doming id quod mazim placerat facer possim assum. <p>Et wisi enim ad minimum veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p> <h3>Duis autem vel?</h3> <p>Eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue feciugait. <h4>Nam liber tempor cum soluta nobis</h4> <p>pilihan eleifend congue nihil imperdiet doming id quod mazim placerat facer possim assum.</p></pre> <p><br /></p>
P粉447002127P粉447002127449 hari yang lalu637

membalas semua(1)saya akan balas

  • P粉957661544

    P粉9576615442023-08-21 18:20:03

    Cuba tukar foreach anda kepada yang berikut dan lihat jika ia berkesan.

    foreach($nodes as $node) {
            $ans = $xp->query("./following-sibling::p[1]",$node)[0]->nodeValue;
            echo "{
                    '@type': 'Question',
                    'name': '".$node->nodeValue."',
                    'acceptedAnswer': {
                        '@type': 'Answer',
                        'text': {$ans}
                    }
                }";

    balas
    0
  • Batalbalas