此:
$XML = new SimpleXMLElement("<foo />");
echo($XML->asXML());
...输出:
<?xml version="1.0"?>
<foo/>
但是我也希望它输出编码:
<?xml version="1.0" encoding="UTF-8"?>
<foo/>
有没有办法告诉SimpleXMLElement包含&lt;?xml?&gt;的编码属性?标签?除此之外:
$XML = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8'?><foo />");
echo($XML->asXML());
哪个有效,但是必须手动指定版本和编码很烦人。
为了这个问题的目的,假设我不能使用DOMDocument。
答案 0 :(得分:20)
你可以试试这个,但你必须使用 simplexml_load_string 作为$ xml
$xml // Your main SimpleXMLElement
$xml->addAttribute('encoding', 'UTF-8');
或者您仍然可以使用其他方法将编码添加到输出中。
简单替换
$outputXML=str_replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="UTF-8"?>', $outputXML);
正则表达式
$outputXML=preg_replace('/<\?\s*xml([^\s]*)\?>/' '<?xml $1 encoding="UTF-8"?>', $outputXML);
DOMDocument - 我知道你说你不想使用DOMDocument,但这是一个例子
$xml=dom_import_simplexml($simpleXML);
$xml->xmlEndoding='UTF-8';
$outputXML=$xml->saveXML();
您可以将此代码包装到接收参数$ encoding的函数中,并将其添加到
答案 1 :(得分:6)
简单明了只做这个
$XMLRoot = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><element></element>');
输出
<?xml version="1.0" encoding="UTF-8"?>
<element></element>
仅在元素中添加属性
$XMLRoot->addAttribute('name','juan');
添加子使用
$childElement = $XMLRoot->addChild('elementChild');
$childElement->addAttribute('attribName','somthing');
答案 2 :(得分:1)
我想说你需要在创建每个XML对象时这样做。即使SimpleXMLElement有一种设置它的方法,你仍然需要设置它,因为我猜对象可以选择有效的默认值。
也许创建一个常量并创建像这样的对象
$XML = new SimpleXMLElement($XMLNamespace . "<foo />");
echo($XML->asXML());
答案 3 :(得分:1)
答案 4 :(得分:0)
如果你没有指定编码,SimpleXML就不能(理智地)猜出你想要的那个。