正则表达式 - 替换内容 - eZ Publish XML字段

时间:2015-11-12 15:58:24

标签: php html regex xml ezpublish

在使用eZ Publish 5 API创建之前,我想要修改一个Xml内容。

我正在尝试使用Regex来修改内容。

这是我拥有的Xml代码(使用html实体):

Print of Xml code http://img15.hostingpics.net/pics/453268xmlcode.jpg

我希望能够在

中捕获 empty.jpg
<img alt="" src="http://www.asite.org/empty.jpg" />

用以下内容替换每次出现

<custom name="my_checkbox"></custom>

问题:

img标签有时可以包含其他属性,例如: height =&#34; 15&#34; width =&#34; 12&#34;

&lt;img height="15" alt="" width="12" src="http://www.asite.org/empty.jpg" /&gt;

有时属性以不同的顺序位于 src 属性之后。

目标是:

Xml code - Aim http://img15.hostingpics.net/pics/318980xmlcodeaim.jpg

到目前为止,我尝试了很多东西,但没有任何效果。

提前感谢您的帮助。

干杯!

编辑:

以下是我迄今为止尝试过的一个例子:

/(&lt;img [a-z = ""]* src="http:\/\/www\.asite\.org\/empty\.jpg" \/&gt)/g

1 个答案:

答案 0 :(得分:0)

处理XML我已经使用XML解析器来到达所需的部分。

然后我们可以应用正则表达式(~<img.*?>(?=</span)~)来选择并用自定义标记替换图像标记(请注意,在xml解析器接收的对象中,html实体将替换为其等效的char)。 / p>

这是一段模拟和处理您情况的代码:

<?php
$xmlstr = <<<XML
<sections>
  <section>
    <paragraph>
      <literal class="html">
        &lt;img alt="" src="http://asite.org/empty.png" /&gt;&lt;/span&gt;&lt;/span&gt; Yes/no&amp;nbsp;&lt;br /&gt;
        &lt;img alt="" src="http://asite.org/empty.png" /&gt;&lt;/span&gt;&lt;/span&gt; Other text/no&amp;nbsp;&lt;br /&gt;
      </literal>
    </paragraph>
  </section>
</sections>
XML;

$sections = new SimpleXMLElement($xmlstr);

foreach ($sections->section->paragraph as $paragraph) {
  $re = "~<img.*?>(?=</span)~";
  $subst = "<custom name=\"my_checkbox\"></custom>";
  $paragraph->literal = preg_replace($re, $subst, $paragraph->literal);
}

echo $sections->asXML();

?>

输出结果为:

<?xml version="1.0"?>
<sections>
  <section>
    <paragraph>
      <literal class="html">
        &lt;custom name="my_checkbox"&gt;&lt;/custom&gt;&lt;/span&gt;&lt;/span&gt; Yes/no&amp;nbsp;&lt;br /&gt;
        &lt;custom name="my_checkbox"&gt;&lt;/custom&gt;&lt;/span&gt;&lt;/span&gt; Other text/no&amp;nbsp;&lt;br /&gt;
      </literal>
    </paragraph>
  </section>
</sections>

可以找到在线演示HERE