Unable to add Attribute with Namespace Prefix using PHP Simplexml
Trying to edit an XML document that uses Excels XML-Namespaces:
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
I need to get to this result (need the ss: prefix befire Type):
<Cell ...><Data ss:Type="String">value</Data></Cell>
I've looked over the question Unable add namespace with PHPs SimpleXML but this method is not helping here. In other words, running this as outlined there
$data = $cells[$i]->addChild('Data','value');
$data->addAttribute("ss:Type","String","urn:schemas-microsoft-com:office:spreadsheet");
gives me
<Cell ...><Data Type="String">value</Data></Cell>
without the ss: prefix. And if I remove the urn: prefix, then I'm getting this
<Cell ...><Data xmlns:ss="schemas-microsoft-com:office:spreadsheet" ss:Type="String">value</Data></Cell>
In either case, when I open the document wit开发者_C百科h Excel, the data is invisible. With urn: the ss: is missing and without urn: the definition becomes part of the element which is not working in Excel.
If you want to add an attribute with a specific namespace prefix w/o adding the namespace to the document, you have to specify not only the prefix in the name parameter, but also prefix it again with xmlns
, in my example: xmlns:ss:Type
. The namespace URI (third parameter) then will be ignored as well, so it is not necessary either:
$data->addAttribute("xmlns:ss:Type", "String");
Note the xmlns: in front of ss:Type. The output then is as required:
<Cell><Data ss:Type="String">value</Data></Cell>
精彩评论