获取SimpleXMLElement以在输出中包含编码

时间:2009-05-15 16:27:53

标签: php xml dom simplexml

此:

$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。

5 个答案:

答案 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)

如果文档不太重,那么Cristian Toma的DOMDoc提案似乎是一种很好的方法。你可以把它包装成这样的东西:

out

当您无法访问生成xml的序列化程序时,它会很有用。

答案 4 :(得分:0)

如果你没有指定编码,SimpleXML就不能(理智地)猜出你想要的那个。