Zobacz temat
[PHP] preg_replace - wyławianie tekstu NIE zawierającego danego słowa (konwerter xml -> mysql)
|
|
QooBooS |
Dodany dnia 28.02.2010 15:52:58
|
Przedszkolak Postów: 52 Data rejestracji: 02.06.2008 22:31 |
Witam. Próbuję stworzyć konwerter, który z kodu zrobi mi zapytanie do bazy MySQL. Mam przykładowo taki kod: Jakiego wzoru użyć dla funkcji preg_replace, by wyłowić z kodu całe sekcje (od <string> do </string>) zawierające taki sam początek w <name></name>, różniące się końcówką, nie usuwając przy okazji innych? Jak na razie napisałem trzy linijki usuwające niepotrzebne rzeczy z kodu:
Po przepuszczeniu przez taki "filtr" otrzymam coś takiego: Jak na razie jest dobrze. Teraz chciałbym, aby obok siebie znalazły się wpisy z tym samym początkiem "name", czyli powyższy przykład powinien wyglądać: Dodatkowo, sekcja z DESC powinna być przed Abnormal, czyli druga i trzecia sekcja powinny być zamienione miejscami. Problem w tym, że nie wiadomo w jakiej kolejności one występują (nieraz Abnormal jest zupełnie przed tym bez końcówki, nieraz za. To samo tyczy się DESC). Następnie chciałbym, aby z uporządkowanego kodu utworzyć zapytanie do bazy danych, które wstawiałoby wszystko po kolei do jednej tabeli w takiej formie:
Chodzi o to, aby wsadzić odpowiednie dane do odpowiednich komórek i połączyć DESC i Abnormal w jedno, oddzielając je pięcioma znakami równości (ot tak, żeby łatwo można było je oddzielić). Być może poradziłbym sobie sam, jednak nie wiem, jak zmusić kompilator do wyszukania name bez końcówki, np. tak: Problem w tym, że w tekst w nawiasach kwadratowych traktowany jest jako osobne litery, więc odrzuci także te, które nie mają końcówki, a zawierają podane litery. Edytowane przez Pieka dnia 28.02.2010 16:16:55 |
|
|
Wścibski Gość |
Dodany dnia 24.11.2024 23:39:39
|
Pan Kontekstualny Postów: n^x Data rejestracji: Zawsze |
|
IP: localhost | |
SebaZ |
Dodany dnia 28.02.2010 19:05:13
|
Zaawansowany Postów: 1598 Pomógł: 2 Data rejestracji: 10.11.2004 22:39 |
Ten Twój kod to XML, więc użyj jakiejś zabawki do parsowania XML'a
Zadawanie pytań na forum to nie jest prawo, to jest przywilej, którego każdy może być pozbawiony jeżeli nie będzie umiał z niego korzystać. Nie wymagaj więc natychmiastowej odpowiedzi.
|
|
|
bartek124 |
Dodany dnia 28.02.2010 20:29:24
|
Weteran Postów: 3264 Pomógł: 236 v7.02.06 Data rejestracji: 26.05.2007 12:25 |
Pakujesz to do simplexml na przyklad i obrabiasz w tym. Bedzie na pewno szybciej, niż bawic sie w wyrazenia regularne.
|
|
|
QooBooS |
Dodany dnia 28.02.2010 22:47:34
|
Przedszkolak Postów: 52 Data rejestracji: 02.06.2008 22:31 |
Dzięki za podpowiedź, SimpleXML wydaje się być prosty w użyciu, jednak nie umiem go wykorzystać w tej sytuacji. Rozwiązałbym to tak: - sortuj wszystkie elementy alfabetycznie według name (niech już stracę, Abnormal niech będzie przed DESC) - przekonwertuj je po kolei na formę MySQL'ową ('id', 'nazwa'... itd.) poprzez wyciągnięcie każdego z tych podelementów z osobna i odpowiednie wstawienie ich w zapytanie. Pytanie: W jaki sposób wykonać takie sortowanie? Jeśli wczytam wszystkie elementy do tablicy, np. wszystkie string, to nie wiem, jak się odwołać do podelementów name, by w odpowiedniej kolejności ustawić ich elementy nadrzędne (string). EDIT: Wymyśliłem coś. Może nie jest to wydajny sposób, nie znam się, ale działa :) Chodzi o sortowanie wpisów z xmla przy użyciu php poprzez wyodrębnienie ich do osobnych tablic i użycie funkcji array_multisort(); poniżej zamieszczam mój kod:
([ i ] to nawiasy kwadratowe [ i ]) Teraz wystarczy foreach'em przejechać po wszystkich elementach którejkolwiek z tablic, używając tego samego indeksu i zrobić z nimi, co się żywnie komu podoba (np. je wyświetlić).
Problem tkwi tu w kodowaniu znaków - plik jest w utf-8, nagłówek xml'a informuje o utf-8, a i tak na stronie wychodzą krzaczki... Jak temu zaradzić? Edytowane przez QooBooS dnia 01.03.2010 00:51:16 |
|
|
bartek124 |
Dodany dnia 01.03.2010 15:11:19
|
Weteran Postów: 3264 Pomógł: 236 v7.02.06 Data rejestracji: 26.05.2007 12:25 |
Przeglądarka także musi wiedzieć, że to utf8. Na razie nie mam czasu spojrzeć na skrypt, jeśli znajdę chwilę to zobacze co i jak :) |
|
|
QooBooS |
Dodany dnia 01.03.2010 15:34:22
|
Przedszkolak Postów: 52 Data rejestracji: 02.06.2008 22:31 |
Zgoda, wysyłam header do przeglądarki za pomocą php i nie działa. Spróbuję zrobić to jako echo htmla, może pomoże. Dam znać co wyszło EDIT: Jednak działa... Nie działało w programie, w którym to sprawdzałem (HateML Pro). Widocznie ma ustawione inne kodowanie. W Firefoxie działa bezbłędnie Dzięki za pomysł z simplexml, tak bym się męczył pewnie z kilka dni Edytowane przez QooBooS dnia 01.03.2010 18:59:03 |
|
Przejdź do forum: |