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

dir*_*ide 17 php xml dom simplexml

这个:

$XML = new SimpleXMLElement("<foo />");
echo($XML->asXML());
Run Code Online (Sandbox Code Playgroud)

...输出:

<?xml version="1.0"?>
<foo/>
Run Code Online (Sandbox Code Playgroud)

但我也希望它输出编码:

<?xml version="1.0" encoding="UTF-8"?>
<foo/>
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉SimpleXMLElement包含<?xml?>标签的编码属性?除此之外:

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

哪个有效,但是必须手动指定版本和编码很烦人.

假设为了这个问题的目的,我不能使用DOMDocument.

Cri*_*oma 20

您可以尝试这样做,但必须使用simplexml_load_string作为$ xml

$xml // Your main SimpleXMLElement
$xml->addAttribute('encoding', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

或者您仍然可以使用其他方法将输出添加到编码中.

简单的替换

$outputXML=str_replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="UTF-8"?>', $outputXML);
Run Code Online (Sandbox Code Playgroud)

常用表达

$outputXML=preg_replace('/<\?\s*xml([^\s]*)\?>/' '<?xml $1 encoding="UTF-8"?>', $outputXML);
Run Code Online (Sandbox Code Playgroud)

DOMDocument - 我知道你说你不想使用DOMDocument,但这是一个例子

$xml=dom_import_simplexml($simpleXML);
$xml->xmlEndoding='UTF-8';
$outputXML=$xml->saveXML();
Run Code Online (Sandbox Code Playgroud)

您可以将此代码包装到一个接收参数$ encoding的函数中,并将其添加到

  • 您的 **DOMDocument** 中存在语法错误:`$xml-&gt;xmlEndoding='UTF-8';` 应该是 `$xml-&gt;xmlEncoding='UTF-8';`。 (4认同)

Dar*_*zer 6

简单明了只做这件事

$XMLRoot = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><element></element>');
Run Code Online (Sandbox Code Playgroud)

产量

<?xml version="1.0" encoding="UTF-8"?>
      <element></element>
Run Code Online (Sandbox Code Playgroud)

在元素中添加属性仅使用

$XMLRoot->addAttribute('name','juan');
Run Code Online (Sandbox Code Playgroud)

添加儿童使用

$childElement = $XMLRoot->addChild('elementChild');
$childElement->addAttribute('attribName','somthing');
Run Code Online (Sandbox Code Playgroud)


Tob*_*len 1

我想说您需要在创建每个 XML 对象时执行此操作。即使 SimpleXMLElement 有一种设置它的方法,您仍然需要设置它,因为我猜对象可以选择有效的默认值。

也许创建一个常量并创建像这样的对象

$XML = new SimpleXMLElement($XMLNamespace . "<foo />");
echo($XML->asXML());
Run Code Online (Sandbox Code Playgroud)