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

2022-08-30 18:24:28

这:

$XML = new SimpleXMLElement("<foo />");
echo($XML->asXML());

...输出这个:

<?xml version="1.0"?>
<foo/>

但我希望它也输出编码:

<?xml version="1.0" encoding="UTF-8"?>
<foo/>

有没有办法告诉 SimpleXMLElement 包含 <?xml?> 标记的编码属性?除了这样做:

$XML = new SimpleXMLElement("<?xml version='1.0' encoding='utf-8'?><foo />");
echo($XML->asXML());

这有效,但是必须手动指定版本和编码很烦人。

出于这个问题的目的,假设我不能使用DOMDocument。


答案 1

您可以尝试此操作,但必须使用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参数并将其添加到


答案 2

简单明了只做这个

$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');

推荐