删除2个字符串之间的字符

时间:2014-12-29 17:50:04

标签: php xml

我有这个XML文件。

<products>
<product zid=&quot;cmslcmsdklcms&quot;>
<price>34</price>
<category>Football</category>
</product>
<product zid=&quot;kcnskcsks77789ds9&quot;>
<price>56</price>
<category>Rugby</category>
</product>
<product zid=&quot;343d34x&quot;>
<price>12</price>
<category>Volley</category>
</product>
</products>

我想删除zid和&amp; quot之间标签内的所有内容。 结果应该是这样的:

<products>
<product>
<price>34</price>
<category>Football</category>
</product>
<product>
<price>56</price>
<category>Rugby</category>
</product>
<product>
<price>12</price>
<category>Volley</category>
</product>
</products>

我想用PHP实现这一点。

2 个答案:

答案 0 :(得分:1)

您可以在整个XML上运行preg_replace。这是一个示例正则表达式:

https://regex101.com/r/dK2jA1/2

使用它,您可以这样做:

$raw_xml = '<products><product zid=&quot;cmslcmsdklcms&quot><price>34</price><category>Football</category></product><product zid=&quot;kcnskcsks77789ds9&quot><price>56</price>
<category>Rugby</category></product><product zid=&quot;343d34x&quot><price>12</price><category>Volley</category></product></products>';

$pattern = "/(<product+.*>)./g";
$replacement = '<product>';

$clean_xml = preg_replace($pattern, $replacement, $raw_xml);

使用相当于<product zid=&quot;343d34x&quot>

的空标记替换所有与<product>类似的数据

那应该让你排序。

答案 1 :(得分:1)

通常simpleXMLDOMDocument对XML更好,但对于这个正则表达式是可以的。如果总是zid=那么类似:

file_put_contents($filename,
    preg_replace('/ zid=[^>]+>/', '>', file_get_contents($filename)));

成为更广泛的替代品:

file_put_contents($filename,
    preg_replace('/<product[^>]+>/', '>', file_get_contents($filename)));