Autor Zpráva
kujeba
Profil
Mám url, ktere po zadání do prohlížeče vrátí XML soubor ve tvaru:
<data xsi:noNamespaceSchemaLocation="http://www.example.cz/doc/example1.xsd">
<head>
  <lastChanged value="25.07.2011 00:30:02.139"/>
</head>
<zeme id="8" name="Itálie">
  <katalog typ="ax_1zeme" lang="cz" polozka="fakultativnivylety">Dle místní nabídky.</katalog>
  <katalog typ="ax_1zeme" lang="cz" polozka="hlavnimesto">Řím (Roma)</katalog>
</zeme>
</data>

http://www.example.cz/doc/example1.xsd vypadá následovně:
<xs:schema>
  <xs:element name="cena">
    <xs:complexType>
      <xs:attribute name="cena" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="id" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="data">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="head"/>
        <xs:element maxOccurs="unbounded" ref="zeme"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="katalog">
    <xs:complexType mixed="true">
      <xs:attribute name="typ" type="xs:string" use="required"/>
      <xs:attribute name="polozka" type="xs:string" use="required"/>
      <xs:attribute name="lang" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>


pokud použiji následující kód:
$contents = @file_get_contents($url);
$xml = @simplexml_load_string($contents);


dostanu přitom úplně jiné XML:
SimpleXMLElement Object
(
    [head] => SimpleXMLElement Object
        (
            [lastChanged] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [value] => 25.07.2011 00:30:02.139
                        )

                )

        )

    [zeme] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [id] => 1
                            [name] => Bulharsko
                        )

                    [katalog] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [typ] => ax_1zeme
                                            [lang] => cz
                                            [polozka] => ceny
                                        )

                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [typ] => ax_1zeme
                                            [lang] => cz
                                            [polozka] => hlavnimesto
                                        )

                                )
                        )
.
.
.


Muzete mi, prosím, poradit, jak pomocí knihovny simpleXML provazat xml s xsi odkazem?
Mike8748
Profil
a jaký máš problém? co je na tom špatně? (ten dump simplexml objektu odpovidá přesně tebou uvedené struktuře, jak si přišel na to že je to jiné xml?)
čeho chceš dosáhnout? validace XML oproti XSD? to simplexml fakt neumí
kujeba
Profil
No já bych chtěl, abych mohl rozparsovat a zpracovávat data která mi vrací prohlížeč. SimpleXML mi vrací jiná data.

Tedy pokud je kvůli tomu potřeba provést validaci XML oproti XSD, co mám použít?
nightfish_
Profil *
kujeba:
No já bych chtěl, abych mohl rozparsovat a zpracovávat data která mi vrací prohlížeč. SimpleXML mi vrací jiná data.
Jaká jiná data? SimpleXML ti vrací strom reprezentující XML data, ukázaná v [#1]. Pokud chceš vrátit data z toho XSD, budeš muset SimpleXML předhodit adresu toho XSD souboru.
Mike8748
Profil
kujeba:
pokud je stále řeč o XML které si uvedl v prvním příspěvku tak tvůj dump simplexml objektu obsahuje ty samá data. pokud máš jiná data prosím ukázku.

pokud chces data pouze vypisovat k čemu validace?

pokud použiju tvůj kód
$xml = @simplexml_load_string($contents);

tak
echo $xml->head->lastChanged['value']; // vypise 25.07.2011 00:30:02.139
echo $xml->zeme['id']; // vypise 8
echo $xml->zeme['name']; // vypise Italie
atd

vypisuje to ta samá data co jsou v uvedeném XML

edit: pokud opravdu chceš provádět validaci toho XML souboru jestli obsahuje přesně to co má tak použij třídu DOMDocument a její metody
kujeba
Profil
Děkuji všem za rady. Použil jsem třídu DOM. I když není simply, tak toho umí daleko více než SimpleXML.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0