Попытка редактировать 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>