Benim PHP app farklı XML biçimleri bir dizi ihraç etmek gerekiyor: XSLT veya yerel PHP kullanmak gerekir?

3 Cevap php

Benim PHP uygulama farklı veri fveyamatları bir dizi tabanlı çoğunlukla XML (gelen ve ithalat) ihraç edebilmek gerekir.

I seçeneğine sahip

  • In PHP, use DOM to expveyat to some XML based fveyamat that is a superset of all the data needed by the others, and create a separate XSLT stylesheet fveya each output fveyamat I want to suppveyat, running the DOM output through PHP's XSL extension.

veya

  • Not using PHP's XSL extension, but implementing each output fveyamat as a class in native PHP that translates directly from the internal objects/structures to a given XML fveyamat using DOM, each such class implementing the same interface so they are interchangeable.

The app will be used by universities and is a tool that manages 'people' recveyads in various ways, and impveyats/expveyats from various sources like their HR system, etc. I'll be implementing the set of input and output fveyamats myself, but in future there is the chance that someone using it will want to modify it to suppveyat their own fveyamat.

One reason I'm considering NOT using XSLT is that if anybody else is going to maintain the app in future other than me, it seems that very few people even know XSLT - a lot mveyae people seem to know PHP.

Another is that the second seems like a mveyae efficient and 'programmery' solution, and mveyae flexible in the sense that I'd be able to output to and impveyat from non-XML fveyamats like CSV veya column based text just as easily by overloading the necessary parts of the class, not that that would often be necessary.

A third, but very small and insignificant reason is that PHP needs recompiling to enable XSL whereas DOM is enabled by default, so it would be a tiny bit mveyae pveyatable. However this isn't too much of a problem as it's easy to reconfigure PHP.

Benim akıl ne düşünüyorsunuz?

3 Cevap

Benim kişisel görüşüm karar sizin amaçlanan izleyici XSLT bilgiye hakim ediyorum nasıl gerçeğine güçlü dayalı olması gerektiğidir. Bu XSLT şekilde sisteme (kendinizi içerir) ile çalışmak zorunda insanlar arasında "bilinmeyen yer" olduğu açıktır Eğer, XSLT-çözümü ekarte edebilirsiniz. Ihtiyaç ve XSLT avantajları inkâr edecek öğrenmek için çaba (çok şık - XML ​​XML dönüşüm, özellikle PHP kodu, gerekli hiçbir PHP bilginiz ile karıştırmaya gerek) Eğer XSLT-çözüm alırsınız.

Belki bir iki yönlü çözümü ile gitmek doğru şey olabilir. Bunu ithal ve XML veri biçimleri için XSLT kullanır ve XML tabanlı olmayan tüm veri formatları için PHP kodu kullanmak için yeteneği sağlar ihracat için bir adaptör-sistem kurmak olabilir. Bu şekilde her geliştirici o daha rahat bir şekilde seçebilirsiniz.

interface My_DataConverter_Interface
{
    /**
          * @param string                $file
          * @return My_DataObject
          */
    function import($file);

    /**
          * @param My_DataObject $data
          * @param string                $file
          */
    function export(My_DataObject $data, $file);
}

abstract class My_DataConverter_Xslt implements My_DataConverter_Interface
{ /* ... */ }

class My_DataConverter_XmlFormat1 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_XmlFormat2 extends My_DataConverter_Xslt
{ /* ... */ }

class My_DataConverter_Csv implements My_DataConverter_Interface
{ /* ... */ }

Senin akıl ses olduğunu düşünüyorum ve ben de gitmek istiyorum yolu.

Temelde ne bahsediyoruz köprü / adaptör / cephe sınıflardır. Onlar (imho) daha esnek ve XSL şablonları daha anlamak kolaydır.

XSL desteği bir PHP uzantısı uncommenting başka bir şey içerir çünkü üçüncü nedeni gerçekten bir değildir.

Ben de yerine tüm kaçan sorunları tanıtır ve etajer yolunuzu kaçınmak gerekir metin olarak XML yazarken daha DOM uzantıları (veya eşdeğer kütüphanede) ile bu yapmak istiyorum görmek için sevindim.

Şahsen ben de XSL şablonları (onları programcıların büyük çoğunluğu biraz daha fazla şifreli olmanın gereği) değiştirmek için daha fazla kırılgan olduğunu düşünüyorum böylece süperset biçimi hiç değiştirirse (ki, o da kabul edelim, bu olacak) potansiyel gerekir Tüm şablonları değiştirmek için. Tabii ki de kod ile bunu yapmak zorunda kalabilirsiniz ama kod muhtemelen korumak için daha kolay olacaktır.

İlginç bir sorun.

Her iki çözüm de çalışacak, ben ancak bu biliyorsun sanırım.

Herhalde kodlu çözümü ile kendim giderdim. Ama thats muhtemelen XSLT başımı ağrıtıyor ile yapmak.

Orada XSLT bir ters olduğunu ve onları size değiştirilmemiş XML vererek insanlar tarafından üretilecek için sorabilirsiniz olduğunu ..

Eğer bunları üreten olacak her zaman, o zaman muhtemelen fark etmez ve kodlanmış çözüm çoğu zaman korumak için daha kolay olacaktır.