2011-11-18 27 views
2

因此,我一直在使用Wordpress 3.x,并试图构建已存储在WP MySQL数据库中的内容的自定义显示。我需要解析每个mp3网址的WP发布内容,以便我可以在代码中的其他地方重复使用它。 WordPress中有一个名为get_the_content()的内置函数,用于获取我的代码中使用的发布内容数据。如何处理脏HTML并使用Xpath(或其他进程)提取URL?

我想我已将代码简化为2行(我试图尽可能高效,因为此代码全部出现在while循环中)加上echo语句以显示xpath创建的数组中捕获的数据。问题似乎我不断收到PHP致命错误:调用非对象上的成员函数xpath(),并且echo调用不返回任何结果。第一个错误显示在短代码[be-linked-title-info]上,然后再次来自href的MP3网址。

这让我觉得帖子内容是“脏”。当上传文件时,Amazon Cloud会为每个空间插入一个“+”,并且我不能指望文件名无效,因为我有一组人上传内容,所以我希望能够提供某些可能会上传的事实名称中包含空格的文件(随后转换为+符号)

如前所述,这个错误会发生在shortcode以及href后面,这可能是使用特殊字符的b/c吗?我在此之后的所有内容都是href中的MP3 URl,仅此而已。我怎样才能清理这些数据,以便正确解析(如果这实际上是问题)?或者可能消除除标签及其属性之外的所有内容?有人可以提供一些关于我不正确行事的建议吗?

这是一个什么样每一个岗位貌似格式&内容方面的例子(这正是由get_the_content()函数返回):

<img class="myclass" title="mytitle" src="http://www.mydomain.com/myfolder/mypic.jpg" alt="myalt" width="552" height="414" /> 

[be-linked-title-info] 

<a title="mytitle" href="https://s3.amazonaws.com/myfolder/published/RJD2+-+SEVEN+LIGHT+YEARS+(INSTRUMENTAL).mp3">Song Name and Artist</a> 

The written plain text post entry describing this music track goes here and says blah blah blah 

这是我使用的代码返回错误:

$xml = simplexml_load_string(get_the_content()); 
$list = $xml->xpath("//a[contains(@href,'mp3')]/@href"); 

,后来我想用这个返回从HREF捕获的网址:

<?php $list[0]; ?> 

回答

2

内容显然并非格式良好的XML。改用这种方法。

// before the loop 
$doc = new DOMDocument(); 
$doc->strictErrorChecking = FALSE; 

$xpath = new DOMXpath($doc); 

// in the loop 
$success = $doc->loadHTML(get_the_content()); 
if ($success === FALSE) { 
    // error handling 
} else { 
    $hrefs = $xpath->query("//a[contains(@href,'mp3')]/@href"); 
    foreach ($hrefs as $href) { 
    // whatever 
    } 
} 

为了使这更有效,你建立从他们DOMDocument之前简单地串接所有文章机构。通过这种方式,您只需要创建/销毁文档和XPath查询一次。

0

这似乎是一个更有效的方法来解决这个问题,不是吗?

// Get web address 
$domQuery = query_HtmlDocument($html, '//a'); 

foreach($domQuery as $rtn) { 
$web = $rtn->getAttribute('href'); 
} 
相关问题