【问题标题】:Regex - Replacing content - eZ Publish XML field正则表达式 - 替换内容 - eZ Publish XML 字段
【发布时间】:2015-11-12 15:58:23
【问题描述】:

我有一个 Xml 内容,我想在使用 eZ Publish 5 API 创建之前对其进行修改。

我正在尝试实现一个正则表达式来修改内容。

这是我拥有的 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="15" width="12"

&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

【问题讨论】:

  • 向我们展示您迄今为止尝试过的方法(不起作用)可能会有所帮助,因为它可以让我们看到您正在尝试哪种方法。还有这个:stackoverflow.com/a/1732454/945456
  • 示例已添加,感谢提供链接。

标签: php html regex xml ezpublish


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的,今天早上我会尝试实施您的解决方案,我会尽快回复您!
  • 我说我必须匹配“empty.jpg”的原因是因为我想为其他图像这样做。
  • 与 span 匹配是个好主意,但我有很多 xml 对象,这些对象并不总是像这样形成,但有一个要替换的图像。我认为我们可以将 xml 视为简单文本,ezpublish API 将在将对象保存在数据库中的同时完成其余的工作。
  • @Kabylzki: xml解析器与否,正则表达式用自定义标签替换整个img标签,你想只替换图像文件名吗? (维护网站?)请提供一些额外的例子
  • 这个解决方案对我有用的任何方式我需要做的就是匹配图像标签以将其替换为自定义标签。谢谢。
猜你喜欢
  • 2018-01-07
  • 2014-10-28
  • 1970-01-01
  • 2012-11-02
  • 2010-10-01
  • 2017-02-21
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
相关资源
最近更新 更多