SimpleXMLElement çıkış kodlayıcı Ulaşım

3 Cevap php

Bu:

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

... Bu çıkışlar:

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

Ama ben de çıktı kodlama etmek istiyorum:

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

etiketinin kodlama öznitelik eklemek için SimpleXMLElement anlatmak için bazı yolu var mı? Kenara bunu yaparken:

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

Çalışır, ancak elle sürüm ve kodlama belirtmek zorunda can sıkıcı Hangi.

Ben bunun yerine DOMDocument kullanamazsınız Bu sorunun amaçlar için varsayalım.

3 Cevap

Bu deneyebilirsiniz, ancak $ xml için simplexml_load_string kullanmanız gerekir

$xml // Your main SimpleXMLElement
$xml->addAttribute('encoding', 'UTF-8');

Yoksa hala sizin çıkış için kodlama eklemek için başka yollarla kullanabilirsiniz.

Simple Replacement

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

Regular Expressions

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

DOMDocument - I know you said you don't want to use DOMDocument, but here is an example

$xml=dom_import_simplexml($simpleXML);
$xml->xmlEndoding='UTF-8';
$outputXML=$xml->saveXML();

Eğer bir parametre $ kodlama alır ve ekler bir işlevi içine bu kodu sarın

Seni Her XML nesnesinin oluşturulması üzerinde bunu yapmak gerekir söyleyebilirim. SimpleXMLElement bu ayar bir yolu olsaydı bile ben nesne geçerli varsayılan almak mümkün olurdu sanırım gibi hala ayarlamak gerekir.

Belki sabit oluşturmak ve bu gibi nesneler oluşturma

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

Bir kodlama yazmazsanız, SimpleXML (sanely) Eğer amaçlanan hangisinin tahmin edemez.