Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Jak wyciągnąć dane od znacznika do określonego znacznika w pliku xml-owym
Znacznik produkt powtarza się 372 razy i teraz potzrebuje podzielić ten plik na kataegorie wg. pola <kat></kat> Czyli wszystkie produkty które będą miały kategorie X będą w pliku X.xml itd
<produkty> <produkt id="7004" nazwa="tablica suchościeralna z Twoją grafiką w dowolnym rozmiarze" kod="" dostawca=""> <rodzaj>obrazy</rodzaj> <cena>25.6</cena> <opis><![CDATA[ <p><strong>Tablicę zamówić można w dowolnym rozmiarze.</strong></p><div id=msize>rozmiar bazowy: 60,0 x 30,0cm szer. x wys. [cm]</div><p>Dostępna w postaci elastycznej, samoprzylepnej folii lub tablicy o grubości 5mm wykonanej z PCV dla większej sztywności i przeznaczonej do montażu w tradycyjny sposób.</p><p style=font-weight: bold;>Możesz załączyć logo firmy, grafikę firmową, stworzyć własny harmonogram, planer, tablicę zespołową, kartę wydawczą z magazynu, spis materiałów, zmywalne etykiety czy elementy promocyjne POS.</p><img style=margin:10px 0; src=img/wydrukuj_swoje_zdjecie{JEZYK_613}.png><p>Poprowadzimy Cię krok po kroku. Po złożeniu zamówienia otrzymasz od nas poglądowy plik, który będziesz mógł sprawdzić i zatwierdzić do druku. Jeżeli potrzebujesz dodatkowych wskazówek, skontaktuj się z nami. Możesz również przesłać do nas swoją grafikę na adres <a href=mailto:info@wally.com.pl>info@wally.com.pl</a>, ocenimy je i przygotujemy plik poglądowy. Akceptujemy formaty jpg, tiff oraz wszelkie wektorowe.</p><h2>prosty montaż</h2><p>Samoprzylepną tablicę suchościeralną wystarczy nakleić na płaską powierzchnię - ścianę, blat stołu lub biurka czy nawet meble. Równie łatwo można ją w każdej chwili zdemontować - zwyczajnie odkleić nie pozostawiając żadnych śladów. Jeżeli wybierzesz tablicę z podkładem z płyty PCV możesz przykleić ją za pomocą taśmy dwustronnej, powiesić, przykręcić lub po prostu wykorzystać jako wolnostojącą.</p><p><strong>Do pisania na tablicy należy używać wyłącznie mazaków przeznaczonych dla tablic suchościeralnych.</strong></p><h2>dlaczego tablica samoprzylepna?</h2><ul><li>lekka i bezpieczna</li><li>tańsza od tradycyjnych tablic</li><li>zapewnia prosty i czysty montaż</li><li><strong>wykonana z profesjonalnej folii tablicowej</strong></li><li>elastyczna i cienka tylko 1 mm grubości lub sztywna 5mm<br></li><li>szybko przykleisz i odkleisz</li><li>dowolny rozmiar</li></ul><p><strong>termin realizacji</strong><br>Tablice realizujemy w terminie od 2 do 5 dni roboczych.</p><p><strong>Pamiętaj!</strong><br>Jeżeli obydwa z wybranych przez Ciebie wymiarów przekroczą 135 cm, wówczas tablica będzie składała się z części.</p><p><strong>Zwróć uwagę</strong> - farby o bardzo wysokiej zawartości lateksu niekorzystnie wpływają na przyczepność tablic. Decydując się na stworzenie dekoracji na tym podłożu robisz to na własną odpowiedzialność gdyż nie uznajemy reklamacji związanych z tymi farbami.</p> ]]></opis> <kategorie> <kat>z Twoim nadrukiem</kat> <kat>tablica na wymiar</kat> </kategorie> <atrybuty> <atrybut id="169425" zmianaceny="0" typzmiany="1" wartosc="0"> <opcja>szerokość</opcja> <nazwa>60 cm</nazwa> </atrybut> <atrybut id="169426" zmianaceny="1" typzmiany="1" wartosc="16.67"> <opcja>szerokość</opcja> <nazwa>70 cm</nazwa> </atrybut> <atrybut id="169427" zmianaceny="1" typzmiany="1" wartosc="33.33"> <opcja>szerokość</opcja> <nazwa>80 cm</nazwa> </atrybut> <atrybut id="169428" zmianaceny="1" typzmiany="1" wartosc="50"> <opcja>szerokość</opcja> <nazwa>90 cm</nazwa> </atrybut> <atrybut id="169429" zmianaceny="1" typzmiany="1" wartosc="66.67"> <opcja>szerokość</opcja> <nazwa>100 cm</nazwa> </atrybut> <atrybut id="169430" zmianaceny="1" typzmiany="1" wartosc="83.43"> <opcja>szerokość</opcja> <nazwa>110 cm</nazwa> </atrybut> <atrybut id="169431" zmianaceny="1" typzmiany="1" wartosc="100.01"> <opcja>szerokość</opcja> <nazwa>120 cm</nazwa> </atrybut> <atrybut id="169432" zmianaceny="1" typzmiany="1" wartosc="116.68"> <opcja>szerokość</opcja> <nazwa>130 cm</nazwa> </atrybut> <atrybut id="169433" zmianaceny="1" typzmiany="1" wartosc="133.35"> <opcja>szerokość</opcja> <nazwa>140 cm</nazwa> </atrybut> <atrybut id="169434" zmianaceny="1" typzmiany="1" wartosc="150.02"> <opcja>szerokość</opcja> <nazwa>150 cm</nazwa> </atrybut> <atrybut id="169435" zmianaceny="1" typzmiany="1" wartosc="166.69"> <opcja>szerokość</opcja> <nazwa>160 cm</nazwa> </atrybut> <atrybut id="169436" zmianaceny="1" typzmiany="1" wartosc="183.36"> <opcja>szerokość</opcja> <nazwa>170 cm</nazwa> </atrybut> <atrybut id="169437" zmianaceny="1" typzmiany="1" wartosc="200.03"> <opcja>szerokość</opcja> <nazwa>180 cm</nazwa> </atrybut> <atrybut id="169438" zmianaceny="1" typzmiany="1" wartosc="216.7"> <opcja>szerokość</opcja> <nazwa>190 cm</nazwa> </atrybut> <atrybut id="169439" zmianaceny="1" typzmiany="1" wartosc="233.37"> <opcja>szerokość</opcja> <nazwa>200 cm</nazwa> </atrybut> <atrybut id="169440" zmianaceny="1" typzmiany="1" wartosc="250.04"> <opcja>szerokość</opcja> <nazwa>210 cm</nazwa> </atrybut> <atrybut id="169441" zmianaceny="1" typzmiany="1" wartosc="266.71"> <opcja>szerokość</opcja> <nazwa>220 cm</nazwa> </atrybut> <atrybut id="169442" zmianaceny="1" typzmiany="1" wartosc="283.38"> <opcja>szerokość</opcja> <nazwa>230 cm</nazwa> </atrybut> <atrybut id="169443" zmianaceny="1" typzmiany="1" wartosc="300.05"> <opcja>szerokość</opcja> <nazwa>240 cm</nazwa> </atrybut> <atrybut id="169444" zmianaceny="1" typzmiany="1" wartosc="316.72"> <opcja>szerokość</opcja> <nazwa>250 cm</nazwa> </atrybut> <atrybut id="169445" zmianaceny="1" typzmiany="1" wartosc="333.39"> <opcja>szerokość</opcja> <nazwa>260 cm</nazwa> </atrybut> <atrybut id="169446" zmianaceny="1" typzmiany="1" wartosc="350.06"> <opcja>szerokość</opcja> <nazwa>270 cm</nazwa> </atrybut> <atrybut id="169447" zmianaceny="1" typzmiany="1" wartosc="366.73"> <opcja>szerokość</opcja> <nazwa>280 cm</nazwa> </atrybut> <atrybut id="169448" zmianaceny="1" typzmiany="1" wartosc="383.4"> <opcja>szerokość</opcja> <nazwa>290 cm</nazwa> </atrybut> <atrybut id="169449" zmianaceny="1" typzmiany="1" wartosc="400.07"> <opcja>szerokość</opcja> <nazwa>300 cm</nazwa> </atrybut> <atrybut id="169450" zmianaceny="1" typzmiany="1" wartosc="416.74"> <opcja>szerokość</opcja> <nazwa>310 cm</nazwa> </atrybut> <atrybut id="169451" zmianaceny="1" typzmiany="1" wartosc="433.41"> <opcja>szerokość</opcja> <nazwa>320 cm</nazwa> </atrybut> <atrybut id="169452" zmianaceny="1" typzmiany="1" wartosc="450.08"> <opcja>szerokość</opcja> <nazwa>330 cm</nazwa> </atrybut> <atrybut id="169453" zmianaceny="1" typzmiany="1" wartosc="466.75"> <opcja>szerokość</opcja> <nazwa>340 cm</nazwa> </atrybut> <atrybut id="169454" zmianaceny="1" typzmiany="1" wartosc="483.42"> <opcja>szerokość</opcja> <nazwa>350 cm</nazwa> </atrybut> <atrybut id="169455" zmianaceny="1" typzmiany="1" wartosc="500.09"> <opcja>szerokość</opcja> <nazwa>360 cm</nazwa> </atrybut> <atrybut id="169456" zmianaceny="1" typzmiany="1" wartosc="516.76"> <opcja>szerokość</opcja> <nazwa>370 cm</nazwa> </atrybut> <atrybut id="169457" zmianaceny="1" typzmiany="1" wartosc="533.43"> <opcja>szerokość</opcja> <nazwa>380 cm</nazwa> </atrybut> <atrybut id="169458" zmianaceny="1" typzmiany="1" wartosc="550.1"> <opcja>szerokość</opcja> <nazwa>390 cm</nazwa> </atrybut> <atrybut id="169459" zmianaceny="1" typzmiany="1" wartosc="566.77"> <opcja>szerokość</opcja> <nazwa>400 cm</nazwa> </atrybut> <atrybut id="169460" zmianaceny="1" typzmiany="1" wartosc="583.44"> <opcja>szerokość</opcja> <nazwa>410 cm</nazwa> </atrybut> <atrybut id="169461" zmianaceny="1" typzmiany="1" wartosc="600.11"> <opcja>szerokość</opcja> <nazwa>420 cm</nazwa> </atrybut> <atrybut id="169462" zmianaceny="1" typzmiany="1" wartosc="616.78"> <opcja>szerokość</opcja> <nazwa>430 cm</nazwa> </atrybut> <atrybut id="169463" zmianaceny="1" typzmiany="1" wartosc="633.45"> <opcja>szerokość</opcja> <nazwa>440 cm</nazwa> </atrybut> <atrybut id="169464" zmianaceny="1" typzmiany="1" wartosc="650.12"> <opcja>szerokość</opcja> <nazwa>450 cm</nazwa> </atrybut> <atrybut id="169465" zmianaceny="1" typzmiany="1" wartosc="666.79"> <opcja>szerokość</opcja> <nazwa>460 cm</nazwa> </atrybut> <atrybut id="169466" zmianaceny="1" typzmiany="1" wartosc="683.46"> <opcja>szerokość</opcja> <nazwa>470 cm</nazwa> </atrybut> <atrybut id="169467" zmianaceny="1" typzmiany="1" wartosc="700.13"> <opcja>szerokość</opcja> <nazwa>480 cm</nazwa> </atrybut> <atrybut id="169468" zmianaceny="1" typzmiany="1" wartosc="716.8"> <opcja>szerokość</opcja> <nazwa>490 cm</nazwa> </atrybut> <atrybut id="169469" zmianaceny="1" typzmiany="1" wartosc="733.47"> <opcja>szerokość</opcja> <nazwa>500 cm</nazwa> </atrybut> <atrybut id="169402" zmianaceny="0" typzmiany="1" wartosc="0"> <opcja>wysokość</opcja> <nazwa>30 cm</nazwa> </atrybut> <atrybut id="169403" zmianaceny="1" typzmiany="1" wartosc="33.33"> <opcja>wysokość</opcja> <nazwa>40 cm</nazwa> </atrybut> <atrybut id="169404" zmianaceny="1" typzmiany="1" wartosc="66.66"> <opcja>wysokość</opcja> <nazwa>50 cm</nazwa> </atrybut> <atrybut id="169405" zmianaceny="1" typzmiany="1" wartosc="100"> <opcja>wysokość</opcja> <nazwa>60 cm</nazwa> </atrybut> <atrybut id="169406" zmianaceny="1" typzmiany="1" wartosc="133.33"> <opcja>wysokość</opcja> <nazwa>70 cm</nazwa> </atrybut> <atrybut id="169407" zmianaceny="1" typzmiany="1" wartosc="166.66"> <opcja>wysokość</opcja> <nazwa>80 cm</nazwa> </atrybut> <atrybut id="169408" zmianaceny="1" typzmiany="1" wartosc="200"> <opcja>wysokość</opcja> <nazwa>90 cm</nazwa> </atrybut> <atrybut id="169409" zmianaceny="1" typzmiany="1" wartosc="233.33"> <opcja>wysokość</opcja> <nazwa>100 cm</nazwa> </atrybut> <atrybut id="169410" zmianaceny="1" typzmiany="1" wartosc="266.66"> <opcja>wysokość</opcja> <nazwa>110 cm</nazwa> </atrybut> <atrybut id="169411" zmianaceny="1" typzmiany="1" wartosc="300"> <opcja>wysokość</opcja> <nazwa>120 cm</nazwa> </atrybut> <atrybut id="169412" zmianaceny="1" typzmiany="1" wartosc="333.33"> <opcja>wysokość</opcja> <nazwa>130 cm</nazwa> </atrybut> <atrybut id="169413" zmianaceny="1" typzmiany="1" wartosc="366.66"> <opcja>wysokość</opcja> <nazwa>140 cm</nazwa> </atrybut> <atrybut id="169414" zmianaceny="1" typzmiany="1" wartosc="400"> <opcja>wysokość</opcja> <nazwa>150 cm</nazwa> </atrybut> <atrybut id="169415" zmianaceny="1" typzmiany="1" wartosc="433.33"> <opcja>wysokość</opcja> <nazwa>160 cm</nazwa> </atrybut> <atrybut id="169416" zmianaceny="1" typzmiany="1" wartosc="466.66"> <opcja>wysokość</opcja> <nazwa>170 cm</nazwa> </atrybut> <atrybut id="169417" zmianaceny="1" typzmiany="1" wartosc="500"> <opcja>wysokość</opcja> <nazwa>180 cm</nazwa> </atrybut> <atrybut id="169418" zmianaceny="1" typzmiany="1" wartosc="533.33"> <opcja>wysokość</opcja> <nazwa>190 cm</nazwa> </atrybut> <atrybut id="169419" zmianaceny="1" typzmiany="1" wartosc="566.66"> <opcja>wysokość</opcja> <nazwa>200 cm</nazwa> </atrybut> <atrybut id="169420" zmianaceny="1" typzmiany="1" wartosc="600"> <opcja>wysokość</opcja> <nazwa>210 cm</nazwa> </atrybut> <atrybut id="169421" zmianaceny="1" typzmiany="1" wartosc="633.33"> <opcja>wysokość</opcja> <nazwa>220 cm</nazwa> </atrybut> <atrybut id="169422" zmianaceny="1" typzmiany="1" wartosc="666.66"> <opcja>wysokość</opcja> <nazwa>230 cm</nazwa> </atrybut> <atrybut id="169423" zmianaceny="1" typzmiany="1" wartosc="700"> <opcja>wysokość</opcja> <nazwa>240 cm</nazwa> </atrybut> <atrybut id="169424" zmianaceny="1" typzmiany="1" wartosc="733.33"> <opcja>wysokość</opcja> <nazwa>250 cm</nazwa> </atrybut> <atrybut id="169470" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>1. góra lewa</nazwa> </atrybut> <atrybut id="169471" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>2. góra środek</nazwa> </atrybut> <atrybut id="169472" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>3. góra prawa</nazwa> </atrybut> <atrybut id="169473" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>4. środel lewa</nazwa> </atrybut> <atrybut id="169474" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>5. środek</nazwa> </atrybut> <atrybut id="169475" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>6. środek prawa</nazwa> </atrybut> <atrybut id="169476" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>7. dół lewa</nazwa> </atrybut> <atrybut id="169477" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>8. dół środek</nazwa> </atrybut> <atrybut id="169478" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>9. dół prawa</nazwa> </atrybut> <atrybut id="169479" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>pozycja grafiki</opcja> <nazwa>10. cała tablica</nazwa> </atrybut> <atrybut id="233670" zmianaceny="0" typzmiany="0" wartosc="0"> <opcja>podłoże</opcja> <nazwa>"samoprzylepne</nazwa> </atrybut> <atrybut id="233671" zmianaceny="1" typzmiany="1" wartosc="120"> <opcja>podłoże</opcja> <nazwa>5mm PCV (nie większa niż 130 x 200 cm)</nazwa> </atrybut> </atrybuty> <obrazki> <obraz id="5388" src="tablica-suchoscieralna-z_5388" /> <obraz id="5389" src="tablica-suchoscieralna-z_5389" /> <obraz id="5390" src="tablica-suchoscieralna-z_5390" /> <obraz id="5391" src="tablica-suchoscieralna-z_5391" /> <obraz id="5392" src="tablica-suchoscieralna-z_5392" /> <obraz id="5393" src="tablica-suchoscieralna-z_5393" /> </obrazki> </produkt>
Offline
Perl i XML::Parser albo Python i BeautifulSoup
Offline
enether napisał(-a):
Perl i XML::Parser albo Python i BeautifulSoup
Pewnie można też w C/C++ używając biblioteki libxml2, ale najpierw radziłbym zdecydować, gdzie i do czego te dane będą wyciągane, np pakowanie ich do skryptu php może oznaczać, że warto porzeźbić w samym php.
Nie znam języka programowania, który nie miałby jednej lub kilku bibliotek do XMLi.
PS.
W Perlu podobno najszybszy jest XML::libXML, za to najłatwiejszy jest XML::Simple.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2013-12-03 19:02:49)
Offline
xml2 <3
przykłady: http://ofb.net/~egnor/xml2/examples
Offline
Źle mnie zrozumieliście. Chodzi mi o zwyczajne pocięcie pliku na tyle plików ile jest katagorii.
nie potzrebuje parsować danych z tego pliku.
Załózmy że jest 10 kategorii w tym jednym pliku. Teraz chcę tak pociąć plik aby jak okaże się że produkt należy do kategorii X dopisywał sie do pliku X.xml (czyli cała struktura xmla dla tego produktu) itd.
Offline
Chyba jednak parsowanie Cię nie minie, jak inaczej chcesz wyciągnąć te kategorie, bez zagłębiania się w drzewo pliku xml?
Offline
Tak na prosto to chciałbym wyciągnąć linie od <produkt*> do lini </produkt>
łącznie z nimi.
Potem jak już byłby pliki zrobiłbym prosty warunek że jak w danym pliku jest kategoria X to dopisz do pliku X.xml
Najtrudniej mi wyciąć te linie
Ostatnio edytowany przez hello_world (2013-12-03 20:02:29)
Offline
xml2, parsowanie czymkolwiek, 2xml?
Offline
Chodziło mi o to:
Tutaj pokazałem na atrybutach ale docelowo bedzie to na <produkt>
sed -n '/<atrybuty>/,/<\/atrybuty>/p' plik.xml
Teraz jak kolejny taki blok zapisac w plikach?
Ostatnio edytowany przez hello_world (2013-12-03 20:30:16)
Offline
Po pierwsze to podaj cały plik, który chcesz przetworzyć, a po drugie to podaj fragment oczekiwango wyniku. Na pewno można to zrobić w awk.
Ostatnio edytowany przez prosze (2013-12-04 17:49:52)
Offline