2013-04-08 70 views
0

裏面有我什麼好的解決方案轉換以下格式的HTML使用的preg_match或至REGx更換了很多的話的HTML

  <span xmlns:v="http://rdf.data-vocabulary.org/#"> 
       <span typeof="v:Breadcrumb"> 
        <a href="http://link1.com/" rel="v:url" property="v:title">Home</a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link2.com/" rel="v:url" property="v:title">Child 2</a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link3.com/" rel="v:url" property="v:title">Child 3</a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <span class="breadcrumb_last" property="v:title">Child 4</span> 
       </span> 
      </span> 

  <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> 
       <span typeof="v:Breadcrumb"> 
        <a href="http://link1.com/" itemprop="url"> 
         <span itemprop="title">Home</span> 
        </a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link2.com/" itemprop="url"> 
         <span itemprop="title">Child 2</span> 
        </a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link3.com/" itemprop="url"> 
         <span itemprop="title">Child 3</span> 
        </a> 
       </span> 
       /
       <span> 
        <span class="breadcrumb_last"> 
         <span itemprop="title">Child 4</span> 
        </span> 
       </span> 
      </span> 

用PHP?我想將RDFa中的麪包粉碎結構轉換爲Microdata。感謝您的幫助

+3

請從正則表達式解析HTML避免,因爲它會[驅使你į̷̷͚̤̤̖̦͍͗̒̈̅̄n̨͖͓̹͍͎͔͈̝͐ͪ͛̄͛ṣ̷̵̞̦ͤ̅̉̋ͪ͑͛ͥ͜a̷̘͖̮͔͎͛̇̏̒͆̆͘n͇͔̤̼͙̩͖̭ͤ͋̉͌͟eͥ͒͆ͧͨ̽͞҉̹͍̳̻͢(http://stackoverflow.com/questions/ 1732348 /正則表達式匹配開放標籤,除了-XHTML-自足標籤/ 1732454#1732454)。改爲使用[HTML解析器](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)。 – 2013-04-08 20:18:30

+0

@MadaraUchiha:RDFa數據是在wordpress內部獲得的。所以我不能僅僅爲了這個目的加載一個html解析器。 – 2013-04-08 20:19:47

+1

爲什麼會阻止您使用HTML解析器? ['DOMDocument'](http://php.net/domdocument),已完成工作。 – DaveRandom 2013-04-08 20:20:51

回答

1

用正則表達式的解決方案,這與您的示例代碼,但是當屬性順序改變它失敗:

$pattern = '#(?:rel\=\"v\:url\"\)? property\=\"v\:title\"\>([^\<]*)\<#ui'; 
$replacement = ' itemprop="url"><span itemprop="title">$1</span><'; 
$output = preg_replace($pattern,$replacement,$original); 

如果可能的話,總覺得HTML/XML解析時你想操縱HTML/XML源代碼,下面是一個強大的工具:https://code.google.com/p/phpquery/。如果你使用jQuery JS框架,這個工具將是您輕鬆;)請參閱:

require_once 'phpquery/phpQuery.php'; 
$dom = phpQuery::newDocument($original); 
foreach($dom->find('a[rel="v:url"]') as &$item){ 
    $txt = $this->text(); 
    $item-> 
     removeAttr('rel')-> 
     removeAttr('property')-> 
     attr('itemprop','url')-> 
     html("<span itemprop=\"title\">$txt</span>");   
} 
$output = "$original";