我最近对 XML 名称空间感到非常痛苦,并在 PHP 中有效地处理它们。这是最坏的罪魁祸首的样本:
<dc:type xsi:type="TypeName" xsi:identifier="NN">Others</dc:type>
我成功地使用 preg_replace 成功地使用以下方法“取消命名空间”标签(不破坏 URL):
$xml = preg_replace(
'/<(\/?)([^:" ].*):([^>\/ ].*)(\/?)>/msiU',
'<$1$2_$3$4>',
$x->readOuterXML()
);
# <dc_type xsi:type="TypeName" xsi:identifier="NN">Others</dc_type>
由于缺乏正则表达式魔法,我无法将所有命名空间属性转换为相同的格式。我设法转换了第一次出现,但不知道如何设置可重复的条件。我删除了代码,因为它不起作用(我不记得我做了什么),但结果是这样的:
<dc_type xsi_type="TypeName" xsi:identifier="NN">Others</dc_type>
而美丽的是这样的:
<dc_type xsi_type="TypeName" xsi_identifier="NN">Others</dc_type>
有没有正则表达式大师可以提供帮助?