2014-12-29 69 views
0

我有这个XML文件。删除2个字符串之间的字符

<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和&之间包含的所有标签内容。 结果应该是这样的:

<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实现这一点。

+0

是否XML文件居然有'"'它,或者它有一个'“' –

+0

?你真的是指关闭''而不是'"'吗?我认为前者无效。 – J0e3gan

+0

@ J0e3gan我编辑过 – splunk

回答

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))); 
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>

替换所有数据的类似 <product zid=&quot;343d34x&quot>

这应该让你排序。

相关问题