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

use*_*201 4 php xml simplexml xml-namespaces

尝试编辑使用Excels XML-Namespaces的XML文档:

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
          xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
Run Code Online (Sandbox Code Playgroud)

我需要得到这个结果(需要ss:前缀befire 类型):

<Cell ...><Data ss:Type="String">value</Data></Cell>
Run Code Online (Sandbox Code Playgroud)

我已经查看了无法使用PHP SimpleXML添加命名空间的问题,但这种方法在这里没有帮助.换句话说,按照那里的说明运行它

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

给我

<Cell ...><Data Type="String">value</Data></Cell>
Run Code Online (Sandbox Code Playgroud)

没有ss:前缀.如果我删除urn:前缀,那么我得到了这个

<Cell ...><Data xmlns:ss="schemas-microsoft-com:office:spreadsheet" ss:Type="String">value</Data></Cell>
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,当我用Excel打开文档时,数据都是不可见的.随着瓮:SS:缺失和不瓮:定义成为部分 在Excel中无效的元素.

use*_*201 11

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

$data->addAttribute("xmlns:ss:Type", "String");
Run Code Online (Sandbox Code Playgroud)

注意xmlns:ss:Type前面.然后根据需要输出:

<Cell><Data ss:Type="String">value</Data></Cell>
Run Code Online (Sandbox Code Playgroud)