3

我正在尝试将 Xml 内容显示到表格中,一切正常,但标签中的某些内容我不想显示,我只想要图像而不是

2012 年 11 月日历来自 5.10 测试

就像在 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 测试

.

<?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> 

您可以看到您在元素的节点值内进行了 HTML 编码。<content:encoded>所以首先你需要获取 HTML 值,你已经这样做了:

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

然后你需要解析里面的HTML $html。可以使用 PHP 进行 HTML 解析的库概述如下:

如果您决定使用或多或少推荐DOMDocument的工作,您只需要获取某个元素的属性值:

或者对于您已经使用的它的姊妹库 SimpleXML(因此更推荐使用,请参阅下一节):


在您的问题的上下文中,以下提示:

您正在使用 SimpleXML。DOMDocument 是一个姊妹库,这意味着您可以在两者之间进行互换,因此您无需学习全新的库。

例如,您可以仅使用 的 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>标签内。例如,这将允许您访问示例中第二个元素中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和这个正则表达式'(http://(?:[^']*))'

于 2013-04-06T09:54:46.387 回答