我有这个XML文件。
<products>
<product zid="cmslcmsdklcms">
<price>34</price>
<category>Football</category>
</product>
<product zid="kcnskcsks77789ds9">
<price>56</price>
<category>Rugby</category>
</product>
<product zid="343d34x">
<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实现这一点。
答案 0 :(得分:1)
您可以在整个XML上运行preg_replace。这是一个示例正则表达式:
https://regex101.com/r/dK2jA1/2
使用它,您可以这样做:
$raw_xml = '<products><product zid="cmslcmsdklcms"><price>34</price><category>Football</category></product><product zid="kcnskcsks77789ds9"><price>56</price>
<category>Rugby</category></product><product zid="343d34x"><price>12</price><category>Volley</category></product></products>';
$pattern = "/(<product+.*>)./g";
$replacement = '<product>';
$clean_xml = preg_replace($pattern, $replacement, $raw_xml);
使用相当于<product zid="343d34x">
<product>
类似的数据
那应该让你排序。
答案 1 :(得分:1)
通常simpleXML
或DOMDocument
对XML更好,但对于这个正则表达式是可以的。如果总是zid=
那么类似:
file_put_contents($filename,
preg_replace('/ zid=[^>]+>/', '>', file_get_contents($filename)));
成为更广泛的替代品:
file_put_contents($filename,
preg_replace('/<product[^>]+>/', '>', file_get_contents($filename)));