0

我有什么好的解决方案来转换以下格式的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 中的面包屑结构转换为微数据。感谢您的帮助

4

1 回答 1

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";
于 2013-04-08T20:24:10.610 回答