无法使用PHP Simplexml添加带有命名空间前缀的属性


Unable to add Attribute with Namespace Prefix using PHP Simplexml

尝试编辑使用excel XML- namespaces的XML文档:

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
          xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

我需要得到这个结果(需要ss:前缀在Type之前):

<Cell ...><Data ss:Type="String">value</Data></Cell>

我已经看过问题无法添加php SimpleXML命名空间,但这种方法在这里没有帮助。换句话说,按照上面的描述运行

$data = $cells[$i]->addChild('Data','value'); 
$data->addAttribute("ss:Type","String","urn:schemas-microsoft-com:office:spreadsheet");

给我

<Cell ...><Data Type="String">value</Data></Cell>
没有ss:前缀的

。如果我删除urn:前缀,然后我得到这个

<Cell ...><Data xmlns:ss="schemas-microsoft-com:office:spreadsheet" ss:Type="String">value</Data></Cell>

无论哪种情况,当我用Excel打开文档时,数据都是不可见的。有了urn:,就缺少了ss:,没有了urn:,定义就变成了元素的一部分,这在Excel中不起作用。

如果您想添加具有特定名称空间前缀的属性而不将名称空间添加到文档中,则不仅要在name参数中指定前缀,还要再次使用xmlns作为前缀,在我的示例中为:xmlns:ss:Type。名称空间URI(第三个参数)也将被忽略,因此也没有必要:

$data->addAttribute("xmlns:ss:Type", "String");

注意xmlns:ss:Type前面。然后输出是所需的:

<Cell><Data ss:Type="String">value</Data></Cell>