2014-12-29 62 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>

這應該讓你排序。

相關問題