PHP DOMDocument-> imi / az / fazla içeren XML ile loadXML?

4 Cevap php

Ben karakterleri ve içeren bir XML dizesini ayrıştırmak çalışıyorum < ve> textData içinde. Normalde, bu karakterleri htmlencoded olmalı, ama benim durumumda bu yüzden şu mesajları almak değildir:

Warning: DOMDocument::loadXML() [function.loadXML]: error parsing attribute name in Entity ... Warning: DOMDocument::loadXML() [function.loadXML]: Couldn't find end of Start Tag ...

Ben bütün ve kodlamak için str_replace kullanabilirsiniz, ama ben yaparsam o yapabilirsiniz Ben de geçerli XML etiketleri için yapıyorum.

Herkes bu sorun için bir çözüm biliyor mu?

Teşekkür ederiz!

4 Cevap

Eğer varsa < Bir XML içindeki metin ... it's not a valid XML. Kodlamak deneyin veya <![CDATA[ içine onları içine.

(Bu "XML" çıktısı değil çünkü) bu mümkün değilse, XML olanlardan daha az sıkı olduğunu beacuse (ben onları kullandım vermedi, ama onlar var) bazı Html ayrıştırma kütüphanesi ile denemek için öneririm.

Ama gerçekten başka bir şey denemeden önce geçerli XML almak için denemek istiyorum!

Eğer yüklemek ne kesinlikle emin olamaz çünkü ben sık sık özellikle domBelgesi için () yüklemek için aramaların önüne @ kullandığınızda, beklenen budur.

@ hataları bastırır kullanma.

@$dom->loadXml($myXml);

Ben bütün ve kodlamak için str_replace kullanabilirsiniz, ama ben yaparsam o yapabilirsiniz Ben de geçerli XML etiketleri için yapıyorum.

Kesinlikle geçici bir düzeltme önlemi olarak bir etiket ya da varlık referans, örneğin neye benzediğini parçası değildir olanları değiştirebilirsiniz.:

$str= preg_replace('<(?![a-zA-Z_!?])', '&lt;', $str);
$str= preg_replace('&(?!([a-zA-Z]+|#[0-9]+|#x[0-9a-fA-F]+);)', '&amp;', $str);

Ancak bu su geçirmez değildir ve uzun vadede bu sahte biçimlendirme oluşturuyor olursa olsun düzeltmek, ya da bir ipucu elde edene kadar bunu düzeltmek gerekiyor kişiye bağırmak gerekiyor. Bu gibi fena halde-olmayan-bir iyi biçimli XML simply not XML tanımı gereğidir.

CDATA unsurları içinde tüm metin koymak?

<!-- Old -->
<blah>
    x & y < 3
</blah>

<!-- New -->
<blah><![CDATA[
    x & y < 3
]]></blah>