3

Xml コンテンツをテーブルに表示しようとしていますが、すべて完全に機能しますが、表示したくないタグのコンテンツがいくつかあります。画像だけが必要ですが、そうではありません

2012 年 11 月のカレンダー 5.10 The Test から

xmlのように、

 <content:encoded><![CDATA[<p>November 2012 calendar from 5.10 The Test</p>
    <p><a class="shutterset_" href='http://trance-gemini.com/wordpress/wp-content/gallery/calendars/laura-bertram-trance-gemini-145-1080.jpg' title='&lt;br&gt;November 2012 calendar from 5.10 The Test&lt;br&gt; &lt;a href=&quot;</a></p>]]>
</content:encoded> 

画像を表示したいが表示しない

2012 年 11 月のカレンダー 5.10 The Test から

.

<?php
// load SimpleXML
$item = new SimpleXMLElement('test1.xml', null, true);

echo <<<EOF
<table border="1px">
        <tr cl>

        </tr>       
EOF;
foreach($item->channel->item as $boo) // loop through our books
{
        echo <<<EOF

         <tr>
            <td rowspan="3">{$boo->children('content', true)->encoded}</td>
            <td>{$boo->title}</td>   
        </tr>

        <tr>
           <td>{$boo->description}</td>
        </tr>

        <tr>
           <td>{boo->comments}</td>
        </tr>
EOF;
}
echo '</table>';
?>
4

2 に答える 2

7

一度答えたことがありますが、もう答えは見つかりません。

文字列(簡略化/美化)を見ると:

<content:encoded><![CDATA[
    <p>Lorem Ipsom</p>
    <p>
      <a href='laura-bertram-trance-gemini-145-1080.jpg' 
         title='&lt;br&gt;November 2012 calendar from 5.10 The Test&lt;br&gt; &lt;a href=&quot;</a>
    </p>]]>
</content:encoded> 

要素の node-valueにHTML がエンコードされていることがわかります<content:encoded>。したがって、最初に HTML 値を取得する必要があります。これは既に行っています。

$html = $boo->children('content', true)->encoded;

次に、内部の HTML を解析する必要があります$html。PHP で HTML 解析を実行できるライブラリについては、以下に概説されています。

仕事に多かれ少なかれ推奨されるものを使用することにした場合DOMDocument、特定の要素の属性値を取得するだけで済みます。

または、すでに使用している姉妹ライブラリ SimpleXML の場合 (したがって、これをお勧めします。次のセクションも参照してください)。


ここでの質問のコンテキストでは、次のヒント:

SimpleXML を使用しています。DOMDocument は姉妹ライブラリです。つまり、この 2 つを相互に交換できるため、まったく新しいライブラリを学習する必要はありません。

たとえば、 の HTML 解析機能のみを使用してDOMDocument、それを にインポートすることができますSimpleXML。SimpleXML は HTML 解析をサポートしていないため、これは便利です。

それは経由で機能しsimplexml_import_dom()ます。

簡単なステップバイステップの例:

// get the HTML string out of the feed:
$htmlString = $boo->children('content', true)->encoded;

// create DOMDocument for HTML parsing:
$htmlParser = new DOMDocument();

// load the HTML:
$htmlParser->loadHTML($htmlString);

// import it into simplexml:
$html = simplexml_import_dom($htmlParser);

$htmlこれで、HTML ドキュメントを表す新しい SimpleXMLElement として使用できるようになりました。HTML チャンクにはタグがない<body>ため、HTML 仕様に従って、<body>タグ内に配置されます。これにより、たとえば、例の2番目の要素内hrefの最初の属性にアクセスできます:#<a><p>

// access the element you're looking for:
$href = $html->body->p[1]->a['href'];

上から見た全体図 (オンラインデモ):

// get the HTML string out of the feed:
$htmlString = $boo->children('content', true)->encoded;

// create DOMDocument for HTML parsing:
$htmlParser = new DOMDocument();

// your HTML gives parser warnings, keep them internal:
libxml_use_internal_errors(true);

// load the HTML:
$htmlParser->loadHTML($htmlString);

// import it into simplexml:
$html = simplexml_import_dom($htmlParser);

// access the element you're looking for:
$href = $html->body->p[1]->a['href'];

// output it
echo $href, "\n";

そしてそれが出力するもの:

laura-bertram-trance-gemini-145-1080.jpg
于 2013-04-06T12:10:53.770 に答える
-3

preg_matchたとえば、この正規表現を介して画像のURLを解析する必要があります'(http://(?:[^']*))'

于 2013-04-06T09:54:46.387 に答える