Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: (MSSQL) Jak wyciagac dane z XML'a !?
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
vincencique
Witam !

Mam problem:
Jak wyciagnac dane z kolumny, ktora jest w xmlu ?

mam tabele z roznymi typami danych - miedzy innymi jedna kolumna jest typu xml.
chcialbym wykonac zapytanie typu:

select * from tabela where kolumna_xml like '%<pozycjaRejestru>30</pozycjaRejestru>%' // jak w mysql

te dane mniej wiecej wygladaja tak
  1. <metadane>
  2. <pozycjaRejestru>30</pozycjaRejestru>
  3. <dataWplywu>2009-01-05</dataWplywu>
  4. <dataPisma>2009-01-05</dataPisma>
  5. <numerPisma>ZST-E423/01/09</numerPisma>
  6. <nadawca typ="3" kategoria="1" id="173">ZSTE</nadawca>
  7. <opis>Dotyczy zainteresowania udziałem w spotkaniu młodzieży szkół ponadgimnazialnych</opis>
  8. <klasyfikacjaDokumentu><kategoria id="3">Pisma</kategoria><rodzaj id="3">Pismo inne</rodzaj><wartosc/>
  9. </klasyfikacjaDokumentu><typKorespondencji id="1">
  10. <rodzaj>Korespondencja zwykła</rodzaj>
  11. <wartosc/>
  12. </typKorespondencji><uwagi/>
  13. <znakReferenta><wydzial id="15">Wydział Spraw Obywatelskich</wydzial><pracownik id="96">P. Małgorzata</pracownik></znakReferenta>
  14. <idSprawy>2422</idSprawy><numerSprawy>SO-0-08/1/2009</numerSprawy>
  15. </metadane>


otrzymuje komunikat, ze like nie mozna stosowac w przypadku xml.
A co stosowac ? Jak ?
Chcialbym wyciagnac wszystkie rekordy gdzie jest <pozycjaRejestru>30</pozycjaRejestru>.

Pomocy ! ohmy.gif
john_doe
Być może nie rozumiem dokładnie o co Ci chodzi szczególnie o kolumne typu xml? Jest taki typ danych w MySQL?
No chyba, że pakujesz xml do kolumny typu char lub varchar?
nie wiem.
Plik, który wkleiłeś nie jest do końca poprawny tzn. nie waliduje się, pewnie dlatego, że wyciąłeś jakiś skrawek

Jednak by wydobywać fajnie dane z pliku XML robisz tak:

Stworzyłem sobie plik xml z Twoimi danymi:
  1. <?xml version="1.0"?>
  2.  
  3. <metadane>
  4.  
  5.      <pozycjaRejestru>30</pozycjaRejestru>
  6.      <dataWplywu>2009-01-05</dataWplywu>
  7.      <dataPisma>2009-01-05</dataPisma>
  8.      <numerPisma>ZST-E423/01/09</numerPisma>
  9.      <nadawca typ="3" kategoria="1" id="173">ZSTE</nadawca>
  10.      <opis>Dotyczy zainteresowania udziałem w spotkaniu młodzieży szkół ponadgimnazialnych</opis>
  11.      
  12.      <klasyfikacjaDokumentu>
  13.            <kategoria id="3">Pisma</kategoria>
  14.            <rodzaj id="3">Pismo inne</rodzaj>
  15.      </klasyfikacjaDokumentu>
  16.      
  17.      <typKorespondencji id="1">
  18.            <rodzaj>Korespondencja zwykła</rodzaj>
  19.      </typKorespondencji>
  20.      
  21.      <znakReferenta>
  22.            <wydzial id="15">Wydział Spraw Obywatelskich</wydzial>
  23.            <pracownik id="96">P. Małgorzata</pracownik>
  24.      </znakReferenta>
  25.  
  26.      <idSprawy>2422</idSprawy>
  27.      <numerSprawy>SO-0-08/1/2009</numerSprawy>
  28.  
  29. </metadane>


i potem
  1. <?php
  2.  
  3. $xml = simplexml_load_file('plik.xml'); //tworzymy obiekt SimpleXMLElement
  4.  
  5. print $xml -> pozycjaRejestru; //wyświetli: 30
  6.  
  7. print $xml -> klasyfikacjaDokumentu -> kategoria; //wyświetli: Pisma
  8.  
  9. print $xml -> idSprawy;
  10.  
  11.  
  12. ?>


teraz jeżeli trzymasz tego text tego xml`a w bazie to wykonaj zapytanie potem wpakuj do zmiennej i zamiast
simplexml_load_file
daj
simplexml_load_string
jednak wtedy xml musisz zapisać w postaci


  1. <?php
  2. $xmlstr = <<<XML
  3. <metadane>
  4.  
  5.    <pozycjaRejestru>30</pozycjaRejestru>
  6.    <dataWplywu>2009-01-05</dataWplywu>
  7.    <dataPisma>2009-01-05</dataPisma>
  8.    <numerPisma>ZST-E423/01/09</numerPisma>
  9.    <nadawca typ="3" kategoria="1" id="173">ZSTE</nadawca>
  10.    <opis>Dotyczy zainteresowania udziałem w spotkaniu młodzieży szkół ponadgimnazialnych</opis>
  11. </metadane>
  12. ?>


pozdro
john_doe
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.