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

时间:2011-10-10 18:49:45

标签: 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">

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

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

我查看了问题Unable add namespace with PHPs 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工作。

1 个答案:

答案 0 :(得分:11)

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

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

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

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