Autor Zpráva
xml problem
Profil *
Ahoj,
mám problém. Vysvetlím.

Načítam si XML súbor z URL
  $request_url = "http://example.com/subor.xml";  
Ten XML má takýto formát:
<produkty>
 <polozka>
  <id>1</id>
  <nazov>Nazov</nazov>
  <popis>Lorem Lipsum</popis>
 </polozka>
 <polozka>
   . . .
 </polozka>
</produkty>

Spracujem to takýmto kódom:


$xml = simplexml_load_file($request_url);

foreach($xml->produkty as $key) {
    $id   = $key->id;
    $nazov = $key->nazov;
    $popis = $key->popis;
}
to je len príklad kódu ja ho mám väčší ale o to nejde..

Teraz mám taký problém, že musím načítať aj druhý XML z inej adresy (to môže už byť v inom súbore)
ale ten druhý XML má takýto formát:

<produkty>
 <polozka id="1" nazov="Nazov" popis="Lorem Lipsum">
 <polozka ...>
 <polozka>
</produkty>

A toto neviem načítať, ako dostať do premenných keď je to takto napísané. Poraďte neaký príkladový kód prosím.
juriad
Profil
K atributu id přistoupíš takto:
$key['id']
xml problem
Profil *
Dakujem,
ešte jeden problém. Prečo mi ten vyššie uvedený kód simplexml_load_file nedokáže načítať XML súbor ktorý má takýto tvar?

<DataSet xmlns="http://www.atcomp.cz/webservices">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="Cenik">
 <xs:element name="Cenik" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
  <xs:complexType>
   <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="Zbozi">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="rozsireny_text" type="xs:string" minOccurs="0" msdata:Ordinal="9"/>
     </xs:sequence>
      <xs:attribute name="kod_zbozi" type="xs:string"/>
      <xs:attribute name="popis" type="xs:string"/>
      <xs:attribute name="part_number" type="xs:string"/>
      <xs:attribute name="zaruka" type="xs:short"/>
      <xs:attribute name="dostupnost" type="xs:boolean"/>
      <xs:attribute name="dph" type="xs:unsignedByte"/>
      <xs:attribute name="cena" type="xs:decimal"/>
      <xs:attribute name="cenaEU" type="xs:decimal"/>
      <xs:attribute name="snimek" type="xs:string"/>
      <xs:attribute name="kod_vyrobce" type="xs:string"/>
      <xs:attribute name="kod_kategorie" type="xs:string"/>
      <xs:attribute name="kategorie" type="xs:string"/>
      <xs:attribute name="kod_podkategorie" type="xs:string"/>
      <xs:attribute name="podkategorie" type="xs:string"/>
      <xs:attribute name="typ" type="xs:int"/>
      <xs:attribute name="aut_poplatek" type="xs:decimal"/>
      <xs:attribute name="rema" type="xs:decimal"/>
      <xs:attribute name="sleva" type="xs:int"/>
      <xs:attribute name="sam_neprodejne" type="xs:int"/>
      <xs:attribute name="kod_sprazene" type="xs:string"/>
      <xs:attribute name="sn_vydej" type="xs:boolean"/>
      <xs:attribute name="ean" type="xs:string"/>
      <xs:attribute name="doprodej" type="xs:boolean"/>
      <xs:attribute name="pevna_cena" type="xs:int"/>
      <xs:attribute name="neprodejneEU" type="xs:unsignedByte"/>
    </xs:complexType>
   </xs:element>
  </xs:choice>
 </xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<Cenik xmlns="">

tu kde uz zacina <cenik xmlns=""> tu už ide to čo som písal v prvom príspevku.
Nefunguje mi to načítať.

$contents = file_get_contents($request_url);
$save = file_put_contents("toto.xml", $contents);
$xml = simplexml_load_file("toto.xml"); //or die("feed sa nepodarilo načítať");
print_r($xml);

Toto mi vypisuje iba
SimpleXMLElement Object ( )

Prosím, kde je problém?
Taps
Profil
xml problem:
soubor toto.xml se ti vytvoří v pořádku ? Má správnou xml strukturu ?
xml problem
Profil *
Áno on vyzerá normálne. Rovnako mi to píše ten SimpleXMLelement Object ( ) ak zadám adresu priamo na dodávateĺa odkiaľ to ťahám
Tori
Profil
xml problem:
Toto mi vypisuje iba
SimpleXMLElement Object (
A co by to mělo vypisovat jiného? Dá se s tou instancí SimpleXMLElement pracovat nebo neobsahuje žádná data?

Jestli to vypisuje objekt i v případě, že čtete např. $prvek->podrizenyPrvek, tak je potřeba to přetypovat na řetězec
xml problem
Profil *
Je to prazdne nic v tom nieje. Prazdne zatvorky.
xml problem
Profil *
Tori:
A co by to mělo vypisovat jiného?
Malo by to vypisovať napr. id ak si zadefinujem id, no nevipisuje to nič.
Taps
Profil
xml problem:
a zapisuješ správně hodnoty do xml souboru ?
např. pokud je v xml níže uvedené
<id>1</id>
tak ti to <? print_r(); ?>
ve výpise vypíše
xml problem
Profil *
Taps:
Asi sa nerozumieme.. ešte raz.
Ten XML je na adrese ws.atcomp.cz/blabla/blabla
A vyzerá takto [#3] a za tým <Cenik ... > ide takto
<Cenik>
 <polozka id="1" nazov="Nazov" popis="Lorem Lipsum">
 <polozka ...>
 <polozka>
</Cenik>
a teraz si chcem nadefinovať napr. id="1" takto:
foreach($xml->Cenik as $key) {
    $id   = $key['id'];
echo $id."<br>";
}
a nič to nevypisuje. Nič ani v prázdne riadky takže to $id sa ani nenačítalo. Toto je môj problém ktorý neviem už dlhšie vyriešiť.. dúfam že sa tu niekto šikovný nájde
Taps
Profil
xml problem:
A zkoušel jsi i něco takového ?
<?
foreach($xml->Cenik->polozka as $key) {
    $id   = $key['id'];
echo $id."<br>";
}
?>
xml problem
Profil *
Taps:
To mi vypisuje
Warning: Invalid argument supplied for foreach() in ...
No ale keď dám že
$xml = simplexml_load_file("toto.xml") or die("feed sa nepodarilo načítať");
tak mi to vyhodí feed sa nepodarilo načítať takže asi nejde to simplexml_load_file lebo ten XML vyzerá dosť čudne keď tma má prvých asi 20 riadkov niečo čo nepotrebujem a ani neviem čo to je


Ešte je to celé (Cenik->Polozka) obalené v
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
Tori
Profil
SimpleXML si zřejmě nerozumí s těmi jmennými prostory. Nicméně pro variantu <polozka id="123" /> se dá se použít i DOM:
$doc = new DOMDocument;
$doc->loadXML($feed);
foreach ($doc->getElementsByTagName('polozka') as $node) {
    $id = $node->getAttribute('id');
    $nazov = $node->getAttribute('nazov');
    $popis = $node->getAttribute('popis');
}
xml problem
Profil *
Tori:
Mno ale píše mi to
Warning: DOMDocument::loadXML(): Start tag expected, '<' not found in Entity, line: 1 in
Tori
Profil
Ty položky by měly být uzavřené, jsou?

<Cenik>
 <polozka id="1" nazov="Nazov" popis="Lorem Lipsum" />
 <polozka ... />
 <polozka />
</Cenik>
Jinak nevím, poskládala jsem si testovací xml z toho, co jste sem poslal, a to fungovalo.
xml problem
Profil *



Nemôže byť že to má môj hosting problém?
xml problem
Profil *
Niesu ukončené a keď ich ukončím cez str_replace('">', '"/>' $xml) tak to hlási chyby.


Takto som to chcle napísať str_replace('">', '"/>', $xml) aby nevznikol omyl že tam mám chybu


Tori
Profil
No tak jestli <polozka> === <Zbozi>, tak to je v [#16] párový tag, takže je to v pořádku bez těch lomítek. Reagovala jsem na [#10], kde to vypadalo celkem jinak.
xml problem
Profil *
jáj.. no ale zatial nič môj problém nevyriešilo.. to vážne nik nevie kde je chyba?

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: