XML için php sarıcı sınıf

3 Cevap php

Ben XML işleme sarmak için yeni bir sınıf üzerinde çalışıyorum. Ben o yüklüyse benim sınıf SimpleXML kullanmak istiyorum, ve eğer o değil XML fonksiyonları inşa. Herkes bana bunu yapmak için bir iskelet sınıf bazı öneriler verebilir? Bu doğru test etmek neredeyse imkansız kılacak gibi ifadeler, ve bu da görünüyor eğer bir demet ile her yöntemi çöp "yanlış" gibi görünüyor.

Herhangi bir peşin öneriniz çok iyi olurdu!

EDIT: I these built-in xml functions bahsediyorum.

3 Cevap

Yerleşik Hangi xml fonksiyonları kastediyorsunuz? Dom uzatma yaptığı gibi - SimpleXML altında libxml'e kullanan standart bir uzantısıdır. Dom uzantısı yüklü eğer öyleyse, şans o kadar SimpleXML olmasıdır.

Ben SimpleXML işlevselliğini sarar bir sınıf ... ne sen ondan olabilir almak yaptık ...

bXml.class.inc

(Eğer giriş olarak XML kabul böylece yani) orada bir garip şey SimpleXML yapıcı aşırı izin vermez o ..., yani inisiyasyon şeyleri yapamam ... gibi giriş değerini geçersiz kılar. Ben yeni SimpleXML sınıfı sarmak için bir DiziNesnesi sınıfını kullanarak sınırlama etrafında var.

Xml çevirileri ve içerik yapmak için bu gibi bir şey kullanabilirsiniz:

Böyle xml yapı şey varsayarak (normal yapısını kullanmak önemlidir, bazı güzel çevik hileler koparmak anlamına gelir!):

<word name="nameofitem">
    <en>value</en>
    <pt>valor</pt>
    <de>value_de</de>
</word>

ve daha sonra bir sınıf xml işlemek için:

class translations
{

    public $xml = null;

    private $file = null;
    private $dom = null;



    function __construct($file="translations")  {
        // get xml

        $this->file = $file;

        $this->haschanges = false;

        $this->xml = file_get_contents($_SERVER['DOCUMENT_ROOT']."/xml/".$file.".xml");
        $this->dom = new DOMdocument();

        $this->dom->loadXML($this->xml);
    }

    function updateNode($toupdate, $newvalue, $lang="pt",$rootnode="word"){

        $this->haschanges = true;

        $nodes = $this->dom->getElementsByTagName($rootnode);
        foreach ($nodes as $key => $value) {
            if ($value->getAttribute("name")==$toupdate) {

                $nodes->item($key)->getElementsByTagName($lang)->item(0)->nodeValue = htmlspecialchars($newvalue,ENT_QUOTES,'UTF-8');
            }
        }
    }


    function saveUpdated(){
        $toSave =  $this->dom->saveXML();
        if ($this->haschanges === true) {
            file_put_contents($_SERVER['DOCUMENT_ROOT']."/xml/".$this->file.".xml", $toSave);
            return true;
        }
        else {
            return false;
        }
    }

}

Ben kısalık için, ben yöntemlerden birkaçı çıkardı, ama ben de vb dosyası ve görüntü yüklenenler işlemek şeyler ile bu uzatmak.

Eğer tüm bu sahip olduktan sonra bunu yapabilirsiniz:

$xml = new translations();
    // loop through all the language posts
    foreach ($_POST["xml"]["en"] as $key => $value) {
        $xml->updateNode($key, stripslashes($value), "en");
    }

Ya da bu size bazı fikirler verir inşallah ;) bir şey!