取得第一個段落之後的標題:XPath
P粉447002127
P粉447002127 2023-08-20 20:52:45
0
1
633
<p>我想在我的網站上新增一個FAQPage架構。 </p> <p>為了做到這一點,我需要找到每一個帶有問號的<code><h2></code>或<code><h3></code>標籤。那就是問題。 </p> <p>之後,我需要將標題後面的第一個<code><p></code>標籤作為答案。 </p> <p>最終結果應該如下:</p> <pre class="brush:php;toolbar:false;">{ "@type": "Question", "name": "處理退款需要多久時間?", "acceptedAnswer": { "@type": "Answer", "text": "從第一個P標籤取得的內容", "url": "https://www.example.com/answer#anchor_link" } }</pre> <ul> <li>問題的<code>"name"</code>是<code><h2></code>或<code><h3></code>標籤。 </li> <li>答案的<code>"url"</code>是從<code><h2></code>或<code><h3></code>標籤中取得的永久連結和錨鏈接。 </li> <li><strong>這兩個參數已經解決了</strong></li> </ul> <p>不幸的是,我無法找到如何取得標題標籤後的第一個段落標籤。</p> <p>我需要在以下行中取得第一個段落的內容:</p> <pre class="brush:php;toolbar:false;">"text": "從第一個P標籤取得的內容",</pre> <p>這是我目前的程式碼:</p> <pre class="brush:php;toolbar:false;"><?php $content_postid = get_the_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 = new DOMDocument; $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); $xp = new DOMXPath($dom); $query = "//h2[contains(., '?')] | //h3[contains(., '?')]"; $nodes = $xp->query($query); $stack = []; if ($nodes) { $faq_count = count($nodes); $faq_i = 1; echo ' <script type="application/ld json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": ['; foreach($nodes as $node) { echo '{ "@type": "Question", "name": "'.$node->nodeValue.'", "acceptedAnswer": { "@type": "Answer", "text": "從第一個P標籤取得的內容", "url": "'.get_permalink().'#'.$node->getAttribute('id').'" } }'; if ($faq_i != $faq_count) : echo ','; endif; $faq_i ; } echo ']}</script>'; } ?></pre> <p>如你所看到的,我使用這行程式碼來找出每一個有<code>?</code>的<code><h2></code>或<code><h2></code>或<code> ;<h3></code>標籤:</p> <pre class="brush:php;toolbar:false;">$query = "//h2[contains(., '?')] | //h3[contains(., '?')]"; </pre> <p>我猜我需要一個第二個<code>$query</code>來找到標題後的段落?但是如何檢查標題後的第一個標籤呢?</p> <p>我嘗試了這個額外的詢問:</p> <pre class="brush:php;toolbar:false;">$query2 = "//h2[contains(., '?')]/following-sibling::p[1] | //h3[contains (., '?')]/following-sibling::p[1]";</pre> <p>但是<code>following-sibling::</code>和<code>following::</code>都不起作用。 它總是顯示最後一個標題後的段落。 </p> <p>我需要解決第一個查詢嗎?以了解我在什麼級別? </p> <p>這是<code>$content_post</code>的範例(它總是不同的):</p> <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. Ut wisi enim ad minim</p> <p>veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p> <h3>Duis autem vel eum?</h3> <p>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 praisal soo​​lal​​l al​​rm​​e a​​lol​​e a​​beberm 片> <h2>Nam liber tempor cum soluta?</h2> <h3>nobis eleifend option congue nihil</h3> <p>imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laore dolunt sed diam nonummy nibh euimod tincidunt ut laore dolunt mia&al; <p>Et wisi enim ad minim 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 blandla facilisis at vero et accum桑;/p> <h4>Nam liber tempor cum soluta nobis</h4> <p>eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.</p></pre> <p><br /></p>
P粉447002127
P粉447002127

全部回覆(1)
P粉957661544

嘗試將您的foreach更改為以下內容,看看是否有效。

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}
                }
            }";
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!