Autor | Zpráva | ||
---|---|---|---|
WMPopi Profil |
#1 · Zasláno: 7. 2. 2012, 01:04:00
Ahoj,
pracuju s xml feedem produktů pomocí simplexml a potřeboval bych dosáhnout toho, aby skriptu bylo jedno, jestli je uvedena značka <PRODUCT> nebo <product>. Co jsem tak hledal, tak simplexml nejspíš nemá žádný case insensitive mód. Ale např. do zboží.cz jim to posíláme pokaždé jinak (velké/malé) a projde to, takže to nějak ošetřené mít musí. Napadlo mě několik způsobů: $xml = "<PRODUCT>Produkt</PRODUCT>"; $xml = preg_replace("#<([^>]*?)>#", "<".strtolower("$1").">", $xml); echo $xml; 1/ Toto mi nefunguje, zajímalo by mě proč $xml = "<PRODUCT>Produkt</PRODUCT>"; preg_match_all("#<([^>]*?)>#", $xml, $matches); // načtu všechny výsledky názvů elementů foreach ($matches[0] as $i => $match) { $replace[$i] = strtolower($match); // v cyklu si je převedenu na lowercase } $xml = str_replace($matches[0], $replace, $xml); // nahradím výsledky zmenšeninami echo $xml; 2/ Toto pracuje přesně jak jsem si představoval, možná že na to jdu ale dost krkolomně. Ovšem při větším počtu produktů narážím na velmi dlouhé zpracování, protože preg_match_all mi uloží seznam všech výskytů, mám tedy v poli 1000x <PRODUCT>. Pokud ale vynechám _all a použiju jen preg_match, tak $xml = "<PRODUCT><TEST>Produkt</TEST></PRODUCT><PRODUCT><TEST>Produkt</TEST></PRODUCT>"; preg_match("#<([^>]*?)>#", $xml, $matches); print_r($matches); vypíše pouze Array ( [0] => <PRODUCT> [1] => PRODUCT ) Takže už nevím jak na to. Udělal jsem si jednoduché řešení, které je ale závislé na tom, abych vyjmenoval všechny elementy; což se mi pochopitelně nelíbí.. $tags = array("SHOP", "SHOPITEM", "PRODUCT", "DESCRIPTION", "PRICE_VAT", "DELIVERY_DATE", "URL", "IMGURL", "CATEGORYTEXT", "MANUFACTURER"); foreach ($tags as $tag) { $xml = str_replace("<$tag>", "<".strtolower($tag).">", $xml); $xml = str_replace("</$tag>", "</".strtolower($tag).">", $xml); } |
||
DoubleThink Profil * |
#2 · Zasláno: 7. 2. 2012, 01:19:08
WMPopi:
„preg_replace("#<([^>]*?)>#", "<".strtolower("$1").">", $xml);“ Tohle je nesmysl. Aby to fungovalo, musel bys použít nějaký callback nebo mód eval. Mimo to je to dost humpolácký postup. Co atributy nebo jmenné prostory? Ty to semele taky. |
||
Keeehi Profil |
#3 · Zasláno: 7. 2. 2012, 02:13:56
WMPopi:
To podstatné už napsal DoubleThink. Jinak zboží.cz na to může jít úplně jinak. Jak víš, že používají simplexml? |
||
Časová prodleva: 12 let
|
0