22

これ:

$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 を使用できないと仮定します。

4

5 に答える 5

23

これを試すことができますが、 $xml にはsimplexml_load_stringを使用する必要があります

$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 を受け取り、それを

于 2009-07-30T11:48:16.877 に答える
13

シンプルかつ明確にこれを行うだけです

$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');
于 2016-05-14T19:15:23.867 に答える
1

各XMLオブジェクトの作成時にこれを行う必要があると思います。SimpleXMLElementに設定する方法があったとしても、オブジェクトが有効なデフォルトを選択できると思うので、設定する必要があります。

たぶん定数を作成し、このようなオブジェクトを作成します

$XML = new SimpleXMLElement($XMLNamespace . "<foo />");
echo($XML->asXML());
于 2009-05-16T07:37:01.593 に答える
0

エンコーディングを指定しないと、SimpleXML は意図したエンコーディングを (正気で) 推測できません。

于 2009-05-22T03:05:26.710 に答える