[PHP]simplexml_load_string

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Prkny 17. 2. 2011 12:51

Zdravím, mám problém s dokumentem XML. Nemohu dostat jeho hodnoty do promenné.

struktura XML:
Kód: Vybrat vše
<Result CouCode="CZ " TaxRateLow="10" TaxRateHigh="20">
    <StoItem Id="17497" Code="K86953" PartNo="11" Name="L-XL 24-26" PriceDea="26.0900"/>
</Result>


kod:
Kód: Vybrat vše
$xml = simplexml_load_string("$adresa_na_xml");
$kod = $xml->Result->StoItem->Code;

echo "$kod";


Prosím co je špatně ?
Naposledy upravil Vebloud dne 17. 2. 2011 14:53, celkově upraveno 1
Důvod: Programovací jazyk do názvu tématu
Prkny
Junior

Odeslat příspěvekod Nargon 17. 2. 2011 13:42

Co jsem se tak koukal na google, tak problem je asi pri te adresaci atributu. Tj pomoci -> se adresuji ty vnitrni elementy ale asi ne atributy. A pak nekde byl problem s typem vracenych dat, takze to jeste chtelo pretypovat. Takze zkus tohle:
Kód: Vybrat vše
$xml = simplexml_load_string("$adresa_na_xml");
$kod = (string)($xml->Result->StoItem->attributes()->Code);
echo "$kod";
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Prkny 17. 2. 2011 14:13

vyřešeno ...
načítal jsem to z externího souboru takže použití funce simplexml_load_file a tvůj attributes()
Pomohlo !! Díky
Prkny
Junior

Odeslat příspěvekod Vebloud 17. 2. 2011 14:51

Co takhle číst pravidla tvorby názvu tématu viewtopic.php?f=923&t=908583
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
Ex-moderátor
Uživatelský avatar

Odeslat příspěvekod Sparhawk77 18. 5. 2016 09:44

Zdravím, chtěl bych Vás požádat o radu ohledně získání atributů z xml souboru. Když jsem měl data ve formátu viz. níže Původní xml data, tak mi kód na získání atributů z xml bezproblémů fungoval. Jen nyní se trochu změnil formát xml dat viz. Nová xml data kde řádek končí > a za ní jsou na konci nové značky <ImgGal/></StoItem> a již jakýkoliv zápis na získání atributů nefunguje :(
Můžete mi prosím poradit jak získat data z atributů ?
Předem děkuji.

Kód: Vybrat vše
$xml = simplexml_load_string("$adresa_na_xml");
$kod = $xml["Code"];
echo "$kod";


Původní xml data
Kód: Vybrat vše
<Result CouCode="CZ " TaxRateLow="0" TaxRateHigh="21">
    <StoItem Id="215" Code="DE525" PartNo="21" Name="ABS 127" PriceDea="21.0300"/>
    <StoItem Id="216" Code="DE526" PartNo="22" Name="ABS 128" PriceDea="24.0400"/>
</Result>


Nová xml data
Kód: Vybrat vše
<Result CouCode="CZ " TaxRateLow="0" TaxRateHigh="21">
    <StoItem Id="215" Code="DE525" PartNo="21" Name="ABS 127" PriceDea="21.0300"><ImgGal/></StoItem>
    <StoItem Id="216" Code="DE526" PartNo="22" Name="ABS 128" PriceDea="24.0400"><ImgGal/></StoItem>
</Result>
Naposledy upravil Sparhawk77 dne 18. 5. 2016 10:00, celkově upraveno 1
Sparhawk77
Kolemjdoucí

Odeslat příspěvekod Just_jo 18. 5. 2016 09:59

To je snadné - od verze php 5.1.0 a Libxml 2.6.0 je zde možnost "Option".
Tam stačí zadat "LIBXML_NOEMPTYTAG", který udělá z "<ImgGal/>" toto "<ImgGal></ImgGal>"

Kód: Vybrat vše
$xml = simplexml_load_string("$adresa_na_xml", 'SimpleXMLElement', LIBXML_NOEMPTYTAG);
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Sparhawk77 18. 5. 2016 10:31

Just_jo: Díky moc za odpověď. v kódu jsem si upravil zápis
Kód: Vybrat vše
$xml = simplexml_load_string("$adresa_na_xml", 'SimpleXMLElement', LIBXML_NOEMPTYTAG);


jen stále se mi nepodařilo získat z XML hodnotu u attributu "Code". Zkoušel jsem různé zápisy, ale stále bez úpěchu.
Sparhawk77
Kolemjdoucí

Odeslat příspěvekod Just_jo 18. 5. 2016 12:47

Tak z toho co jsi psal žádné "Code" není k dispozici. Je tam jen "CouCode" - podívej se co vypíše
Kód: Vybrat vše
var_dump( $xml );
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Sparhawk77 18. 5. 2016 13:09

Code je ve značce StoItem - Code="DE525"

Kód: Vybrat vše
<StoItem Id="215" Code="DE525"

Kód: Vybrat vše
var_dump( $xml );

vypsal:
object(SimpleXMLElement)#25 (0) { }
Sparhawk77
Kolemjdoucí

Odeslat příspěvekod karlos00x 18. 5. 2016 15:57

vardump je ti naprd. musis neco jako "rekni mi metody objektu", pak zjistis ze ma simplexml neco jako "povim ti sve vlastnosti". nebo ho zkus konvertovat na pole. celkove je to oser s nim neco debugovat.
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod Just_jo 18. 5. 2016 16:14

Tak si to asi pamatuješ jinak. Teď se s tím pracuje takto
Kód: Vybrat vše
$kod = $xml->StoItem['Code'];

echo $kod;
Just_jo
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků