PHP kullanarak ayrıştırma XML - ve işaretleri ve diğer karakterler içerir

4 Cevap php

Ben bir XML dosyası ayrıştırmak çalışıyorum ve alanlardan biri aşağıdaki gibi görünür:

<link>http://foo.com/this-platform/scripts/click.php?var_a=a&var_b=b&varc=http%3A%2F%2Fwww.foo.com%2Fthis-section-here%2Fperf%2F229408%3Fvalue%3D0222%26some_variable%3Dmeee</link>

Bu ayrıştırıcı kırmak gibi görünüyor. i & ile ilgili bir şey olabileceğini düşünüyorum bağlantı?

Benim kod oldukça basittir:

<?

$xml = simplexml_load_file("files/this.xml");

echo $xml->getName() . "<br />";

foreach($xml->children() as $child) {
  echo $child->getName() . ": " . $child . "<br />";
}
?>

ben bu çözebilirsiniz nasıl herhangi bir fikir?

4 Cevap

Tarafından Yorum mjv çözüldü:

Alternatively to using &, you may consider putting the urls and other XML-unfriendly content in , i.e. a Character Data block

Deftere XML pasajı geçerli değil. Imi kaçtı gerekir, bu yüzden ayrıştırıcı şikayetler.

XML feed geçerli XML değil: & &amp; olarak kaçtı edilmelidir

Bu :-( üzerinde bir XML ayrıştırıcı kullanmak anlamına gelir

Olası bir "çözüm" (feels wrong, but should work) önce geçerli bir XML dizesi almak için, '&' yerine '&amp;' ile bir varlığın parçası olmadığını olurdu XML çözümleyici ile yükleme.


In your case, considering this :

$str = <<<STR
<xml>
  <link>http://foo.com/this-platform/scripts/click.php?var_a=a&var_b=b&varc=http%3A%2F%2Fwww.foo.com%2Fthis-section-here%2Fperf%2F229408%3Fvalue%3D0222%26some_variable%3Dmeee</link>
</xml>
STR;

Böyle str_replace için basit bir çağrı, kullanabilirsiniz:

$str = str_replace('&', '&amp;', $str);

Ve sonra, dize (now XML-valid) o öyle ayrıştırmak $str:

$xml = simplexml_load_string($str);
var_dump($xml);

Bu durumda, bu çalışması gerekir ...


But note that you must take care about entities : if you already have an entity like '&gt;', you must not replace it to '&amp;gt;' !

Muhtemelen birçok XML akışları yapmayı kıracak: Hangi böyle basit bir çağrı str_replace doğru çözüm olmadığı anlamına gelir!

Kadar bunu değiştirme yapmak için doğru yolu bulmak için - belki regex bir çeşit ...

& &amp; olarak kodlanmış olmalıdır - XML ​​geçersiz çünkü çözümleyici kırar.