Etiket adlarında iki nokta üst üste ile XML ayrıştırma için PHP kütüphanesi?

4 Cevap php

Bu soru burada zaten bir cevabı var:

4 Cevap

Bu gibi bazı xml söylüyorlar.

<xhtml:div>
  <xhtml:em>italic</xhtml:em>
  <date>2010-02-01 06:00</date>
</xhtml:div>

$xml->children('xhtml', true)->div->em;: Bu gibi 'em' erişebilirsiniz

however, sen tarih alanı istiyorsanız, bu: Eğer xhtml ad sıkışmış $xml->children('xhtml', true)->div->date; wont work, çünkü.

Eğer 'çocuk' yine varsayılan ad geri almak için yürütmek gerekir:

$xml->children('xhtml', true)->div->children()->date;

Ad Hep bana sorarsanız aslında gerçek dünyada var olmayan sorunlar bir sürü çözmek için atılan saf mimari yetenek vardır ... sonsuz sorunlara neden gibi görünüyor.

Kolon bir XML ad alanı gösterir. DOM ad alanları için iyi bir destek var.

Bunu hızlı bir şekilde düzeltmek istiyorsanız (I do when I feel lazy):

// Will replace : in tags and attributes names with _ allowing easy access
$xml = preg_replace('~(</?|\s)([a-z0-9_]+):~is', '$1$2_', $xml);

This will convert <xhtml: to <xhtml_ and </xhtml: to </xhtml_. Kind of hacky and can fail if CDATA NameSpaced XML container blocks are involved or UNICODE tag names but I'd say you are usually safe using it (hasn't failed me yet).

Ben kolon kurtulmak için iyi bir fikir olduğunu sanmıyorum ya da bazı insanlar olarak önerilen başka bir şey ile değiştirmek. Kolayca bir ad alanı öneki olan öğeleri erişebilirsiniz. Ya çocuklar için bir argüman olarak, ad alanını tanımlayan URL () yöntemi geçmek ya ad öneki ve çocuklara "true" () yöntemi geçebilir. İkinci yaklaşım PHP 5.2 ve üstü gerektirir.

SimpleXMLElement::children