Unable to add Attribute with Namespace Prefix using PHP Simplexml

六眼飞鱼酱① 提交于 2019-11-28 01:26:20

问题


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


回答1:


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>


来源:https://stackoverflow.com/questions/7717227/unable-to-add-attribute-with-namespace-prefix-using-php-simplexml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!