在使用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;
<img height="15" alt="" width="12" src="http://www.asite.org/empty.jpg" />
有时属性以不同的顺序位于 src 属性之后。
目标是:
Xml code - Aim http://img15.hostingpics.net/pics/318980xmlcodeaim.jpg
到目前为止,我尝试了很多东西,但没有任何效果。
提前感谢您的帮助。
干杯!
编辑:
以下是我迄今为止尝试过的一个例子:
/(<img [a-z = ""]* src="http:\/\/www\.asite\.org\/empty\.jpg" \/>)/g
答案 0 :(得分:0)
处理XML我已经使用XML解析器来到达所需的部分。
然后我们可以应用正则表达式(~<img.*?>(?=</span)~
)来选择并用自定义标记替换图像标记(请注意,在xml解析器接收的对象中,html实体将替换为其等效的char)。 / p>
这是一段模拟和处理您情况的代码:
<?php
$xmlstr = <<<XML
<sections>
<section>
<paragraph>
<literal class="html">
<img alt="" src="http://asite.org/empty.png" /></span></span> Yes/no&nbsp;<br />
<img alt="" src="http://asite.org/empty.png" /></span></span> Other text/no&nbsp;<br />
</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">
<custom name="my_checkbox"></custom></span></span> Yes/no&nbsp;<br />
<custom name="my_checkbox"></custom></span></span> Other text/no&nbsp;<br />
</literal>
</paragraph>
</section>
</sections>
可以找到在线演示HERE