Невозможно добавить атрибут с префиксом пространства имен, используя PHP Simplexml - PullRequest
4 голосов
/ 10 октября 2011

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

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

Мне нужно добраться до этого результата (нужен префикс ss: * Тип ):

<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.

1 Ответ

11 голосов
/ 11 октября 2011

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

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

Обратите внимание на xmlns: перед ss: Тип .Выходные данные тогда соответствуют требованиям:

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