Невозможно добавить атрибут с префиксом пространства имен с помощью PHP Simplexml

Попытка редактировать XML-документ, который использует Excels XML-Namespaces:

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

Мне нужно получить этот результат (нужен ss: prefix befire 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:. И если я удалю урну: префикс, тогда я получаю это

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

В любом случае, когда я открываю документ в Excel, данные невидимы. С урнами: ss: отсутствует и без урны: определение становится частью который не работает в Excel.

Если вы хотите добавить атрибут с определенным префиксом пространства имен без добавления пространства имен в документ, вы должны указать не только префикс в параметре имени , но и префикс его снова с помощью xmlns в моем примере: xmlns:ss:Type . Тогда URI пространства имен (третий параметр) также будет проигнорирован, поэтому нет необходимости:

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

Обратите внимание на xmlns: перед ss: Type . Затем вывод должен быть следующим:

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