【问题标题】:Unable to add Attribute with Namespace Prefix using PHP Simplexml无法使用 PHP Simplexml 添加带有命名空间前缀的属性
【发布时间】:2011-10-10 18:49:44
【问题描述】:

尝试编辑使用 Excels XML 命名空间的 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>

我已经查看了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 中工作。

【问题讨论】:

标签: php xml simplexml xml-namespaces


【解决方案1】:

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

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

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

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

【讨论】:

  • 这有助于解决我在 PHP 中使用 simplexml 构建 Excel 文件时遇到的问题。非常感谢。
  • 请注意,这实际上并没有为属性设置命名空间,尽管使用SimpleXMLElement-&gt;asXML() 序列化时的结果是等效的。相反,“ss:”是属性名称的local part 的一部分。比较$data-&gt;attributes('ss', TRUE)$data-&gt;attributes() 的输出。您还可以使用任何前缀,而不仅仅是“xmlns”。
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多