xml data binding su PHP

įvertino 0
Neatsakyta Ši žinutė turi 0 patvirtinti atsakymai | 7 Atsakymai | 3 Šalininkai

Top 10 autorių
92 Žinutės
Taškai 1,775
dziedrius parašyta 2010-2-26 13:30

Sveiki, antraštė turbūt keistai skamba šito forumo kontekste, bet jeigu aš susidūriau, tai gal ir dar kas nors susidūrė. Problema tokia, klientas integruojasi su mūsų sistema, bet bėda kad jis savo sistemą rašo su PHP ir jam reikia pasiimti informaciją iš XML dokumento, turint xsd schemą. .NET'e aš ne kartą dariau taip: su xsd.exe susigeneruoju klasę iš xsd failo, pasiredaguoju kiek man reikia ją rankomis ir tada tiesiog deserializuoju xml'ą į tos klasės instance. O įdomu kaip tą padaryti ir ar įmanoma su PHP, gal kam teko susidurti?

  • | Žinučių taškai: 50

Visi atsakymai

Top 10 autorių
Moteris
63 Žinutės
Taškai 1,395

http://forums.devshed.com/xml-programming-19/validating-xml-against-xsd-with-php-430794.html

  • | Žinučių taškai: 20
Top 10 autorių
92 Žinutės
Taškai 1,775

Na čia ne visai tai, čia yra xml validavimas pagal pateiktą schemą, o man reikėtų bindinimo.

  • | Žinučių taškai: 5
Top 10 autorių
Vyras
129 Žinutės
Taškai 2,500

Na facebook komanda parase Thrift http://developers.facebook.com/thrift/ . Jei as viska teisingai suprantu, tai galima savo xsd pakonvertuoti i thrift : http://tranchis.github.com/xsd2thrift/ . Tada thrift kompiliatoriaus pagalba butu galima sugeneruoti manau koda. Tiksliai nezinau ar as cia tiesa kalbu :) bet tokia ideja kilo. Kadangi man sito dalyko nereikejo tai patingejau pasigilinti ;)

  • | Žinučių taškai: 5
Top 10 autorių
Vyras
182 Žinutės
Taškai 345,520

Giedriau, ar radai sprendimą?

  • | Žinučių taškai: 20
Top 10 autorių
92 Žinutės
Taškai 1,775

Sergejus:

Giedriau, ar radai sprendimą?

Ne, naudojom xpath ir rankutemis mapinom.

  • | Žinučių taškai: 20
Top 50 autorių
Vyras
6 Žinutės
Taškai 105

Gal eitų prasisukti su XML data islands:

http://www.globalguideline.com/xml/XML_Data_Island.php

Aišku, pakankamai didelis apribojimas, kad veikia tik ant IE berods.

  • | Žinučių taškai: 20
Top 10 autorių
92 Žinutės
Taškai 1,775

Edmundas:

Gal eitų prasisukti su XML data islands:

http://www.globalguideline.com/xml/XML_Data_Island.php

Aišku, pakankamai didelis apribojimas, kad veikia tik ant IE berods.

Čia ne visai tas dalykas, apie ką kalbama.

Anyway, atsitiktinai suvokiau kame problema - pasirodo php bando tai daryti be xsd schemos, tiesiog ima xml ir večia jį į objektą:

http://www.php.net/manual/en/simplexml.examples-basic.php

Todėl kai ieškodavau bindinimo pagal xsd schemą kaip kad yra .NET, nugrybaudavau.

Todėl seka būtų tokia:

1) su DOMDocument užsikraunam xml ir patikrinam dokumentą pagal turimą schemą

2) su SimpleXml konvertuojam DOMDocument struktūrą į SimpleXML formatą

Netikrintas pavyzdys būtų:

function libxml_display_error($error)
{
    $return = "<br/>\n";
    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "<b>Warning $error->code</b>: ";
            break;
        case LIBXML_ERR_ERROR:
            $return .= "<b>Error $error->code</b>: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "<b>Fatal Error $error->code</b>: ";
            break;
    }
    $return .= trim($error->message);
    if ($error->file) {
        $return .=    " in <b>$error->file</b>";
    }
    $return .= " on line <b>$error->line</b>\n";

    return $return;
}

function libxml_display_errors() {
    $errors = libxml_get_errors();
    foreach ($errors as $error) {
        print libxml_display_error($error);
    }
    libxml_clear_errors();
}

// Enable user error handling
libxml_use_internal_errors(true);

$xml = new DOMDocument();
$xml->load('example.xml');

if (!$xml->schemaValidate('schema.xsd')) {
    print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
    libxml_display_errors();
}
else {
    $object = simplexml_import_dom($xml);
   
    // do your stuff here
    echo $object->book[0]->title;
}

 

btw, komentaruose skaičiau, kad jeigu xml intensyviai naudoja namespace'us, SimpleXml turi problemų.

  • | Žinučių taškai: 5
Puslapis 1 iš 1 (8) | RSS
DotNetGroup.LT, 2009