Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][XML] Wczytanie pliku XML na ekran, Jak wczytać plik XML
8_pasarzer_NOSTR...
post
Post #1





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Proszę o pomoc z wczytaniem takiego XML, bo nie daje rady.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Rozkaz version="1" nazwaJednostki="Urząd Miasta" jednostka="2121" dataOd="2014-12-11T09:54:35.0" dataDo="2014-12-11T10:01:24.0" dataUtworzenia="2014-12-11T10:01:24.0" xmlns="http://www.on.pl" xmlns:ms="http://www.on.pl" xmlns:sl="http://www.on.pl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.on.pl">
  3. <ms:Rozkazy ID="0001">
  4.  
  5. <ms:Sygnatura wydzial="I" repertorium="C" nr="10" rok="2012"/></ms:Sygnatura>
  6. <ms:DataWpisu>2014-12-11</ms:DataWpisu>
  7. <ms:DataZarzadzenia>2014-12-11</ms:DataZarzadzenia>
  8.  
  9. <ms:Osoba ID="397082">
  10. <ms:Imie>Pingwin</ms:Imie>
  11. <ms:Nazwisko>Kowalski</ms:Nazwisko>
  12. <ms:Plec>Mężczyzna</ms:Plec>
  13. <ms:AdresyOsoby>
  14. <ms:AdresKorespondencyjny ulica="ul. Wielka" nr_domu="1" nr_mieszkania="33" miejscowosc="Wrocław" poczta="Wrocław" kod="53-333" wojewodztwo="dolnośląskie" kraj="Polska"/>
  15. </ms:AdresyOsoby>
  16. <ms:PESEL>71121212121</ms:PESEL>
  17. <ms:ImieOjca>Marian</ms:ImieOjca>
  18. <ms:DataUrodzenia>1971-12-12</ms:DataUrodzenia>
  19. <ms:MiejsceUrodzenia>Zieliniec</ms:MiejsceUrodzenia>
  20. <ms:Obywatelstwo>Polska</ms:Obywatelstwo>
  21. </ms:Osoba>
  22.  
  23. <ms:Uwagirozkazu>niebezpieczny</ms:Uwagirozkazu>
  24. <ms:Instytucja ID="737" ma_osobowosc_prawna="false" typ="Sąd"></ms:Instytucja>
  25. <ms:Sprawa>ważna</ms:Sprawa>
  26.  
  27. </ms:Rozkazy>
  28. </Rozkaz>


W jaki sposób wczytać taki plik by do zmiennej zaciągnąć np. PESEL osoby. W jakis sposób wyciągnąć wszystkie dane do zmiennych. Żaden sposób, który znalazłem w necie mi nie poszedł.
Proszę o pomoc.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://php.net/manual/en/book.simplexml.php
A jak masz problem z konkretnym kodem, to podaj ten kod
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #3





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


A możesz napisać mi jak pobrać PESEL z tego XML. Sam sobie resztę wyciągnę.

Próbowałem tak:
  1. $xml = simplexml_load_file($plik);
  2. $oko= $xml->Rozkazy->PESEL;
  3. echo $oko;


I nic. Nie wiem jak odnieść się do konkretnego elementu. A plik mam nie z bazy danych lecz wysyłam go za pomocą formularza postem. Wcześniej wskazuje go z dysku. Bardzo dużo przykładow jest na funkcji simplexml_load_string($plik); a ja chce na file.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Bardzo dużo przykładow jest na funkcji simplexml_load_string($plik); a ja chce na file.
Ale do danych w XML odwolujesz sie tak samo, niezaleznie czy to z pliku czy z tekstu...
Patrzyles w oogole czy wczytalo ci ten plik? Nie podajesz przypadkiem znowu złej ścieżki do niego jak ostatnio?
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #5





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Pamiętasz widzę dobrze, ostatnio miałem biednego XML i dałęm sobie z nim rade. teraz mam kolosa :-)

  1. $xml = simplexml_load_file($plik);
  2.  
  3. $xml->getName();
  4.  
  5. // gdy dam print_r($xml). Wypali mi tablice Rozkaz tj. <Rozkaz version="1" nazwaJednostki="Urząd Miasta" jednostka="2121" dataOd="2014-12-11T09:54:35.0" dataDo="2014-12-11T10:01:24.0" dataUtworzenia="2014-12-11T10:01:24.0" xmlns="http://www.on.pl" xmlns:ms="http://www.on.pl" xmlns:sl="http://www.on.pl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.on.pl">
  6.  
  7. // Ale za chiny nie mogę dostać sie zniżej, do pozostałych konusów.
  8.  
  9. foreach ($xml->children() as $child)
  10. {echo $child;}
  11. // też nic


Kto jeszcze pomoże ?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


echo (string)$child;
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #7





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Nic, pusto.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Bo masz Namespace ustawione

  1. <?php
  2.  
  3. $xml = simplexml_load_file('./data.xml');
  4. $ns = $xml->getNamespaces(true);
  5. foreach ($xml->children($ns['ms']) as $child)
  6. {
  7. echo '<pre>'; var_dump($child); echo'</pre>';die(__FILE__ . ': '.__LINE__);
  8. }
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #9





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Dzieki, coś ruszyło. Jakbyś był jeszcze tak miły, to w jaki sposób można odnieść się do konkretnego elementu tablicy $child. Np. Jak wypisać sam PESEL z tych danych.
Go to the top of the page
+Quote Post
robertpiaty
post
Post #10





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Poczytaj o xpath. A tu masz jak użyć xpath http://php.net/manual/en/simplexmlelement.xpath.php

Ten post edytował robertpiaty 12.02.2015, 20:42:04
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #11





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


możesz podać mi gotowe rozwiązanie jak wyciągnąć ten pesel. Bo w manualu gdzie mnie wysłałeś nie ma dokładnie takiego przykładu jak mój. Jutro w pracy oczywiście pokombinuje ale jakbyś był miły byłbym wdzięczny.
Go to the top of the page
+Quote Post
robertpiaty
post
Post #12





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


Dokładnie tego XPATH-a nie pamiętam bo dawno nie używałem. Spróbuj coś w ten deseń:
  1. $xml = new SimpleXMLElement($string);
  2. $data = $xml->xpath('//ms:PESEL');


Dostajesz tablicę z obiektami SimpleXMLElement. Jak je wyświetlić to jużjest w tym linku co wcześniej podałem
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #13





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Wiec dałem tak :

  1. foreach ($xml->children($ns['ms']) as $child)
  2. {
  3.  
  4. echo '<pre>'; var_dump($child); echo'</pre>';die(__FILE__ . ': '.__LINE__);
  5. }


I dostałem tablice $child, skróciłęm ją żeby nie była zbyt wielka.

  1. SimpleXMLElement Object ([Osoba] => SimpleXMLElement Object ( [Imie] => Pingwin [Nazwisko] => Kowalski [Plec] => Mężczyzna [AdresyOsoby] => SimpleXMLElement Object ( [AdresKorespondencyjny] => SimpleXMLElement Object ( ) ) [PESEL] => 71121212121[ImieOjca] => Marian [DataUrodzenia] => 1971-12-12 [MiejsceUrodzenia] => Zieliniec [Obywatelstwo] => Polska [AdresyInstytucji] => SimpleXMLElement Object ( [Adres] => SimpleXMLElement Object ( ) ) ) [Dokument] => SimpleXMLElement Object ( [DataSporzadzenia] => 2014-12-11 [Nazwa] => Rozkaz)


Próbowałem dostać sie do elementów poprzez : $data = $xml->xpath('//ms:PESEL'); i nie działa. Jakby ktoś mi pomógł jak odnosić się do poszczególnych elementów tej tablicy i ewentualnie do ich atrybutów jeśli są np.

  1. <ms:Sygnatura wydzial="I" repertorium="C" nr="10" rok="2012"/></ms:Sygnatura>
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


  1. echo '<pre>'; print_r((string)$child->Osoba->PESEL); echo'</pre>';die(__FILE__ . ': '.__LINE__);
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #15





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Dzieki Pyton, jestes wielki!

A podpowiedz mi jeszcze jak dobrać się do tego typu argumentów

  1. <ms:Rozkazy ID="0001">
  2. <ms:Sygnatura wydzial="I" repertorium="C" nr="10" rok="2012"/>


Chodzi mi o ID="0001" oraz wydzial="I", repetytorium="C" itp.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


  1. echo (string)$xml->Sygnaturka['wydzial'];
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #17





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Nie poszło.

Przy var_dump($child) pokazuje taki zapis.

  1. object (SimpleXMLelement)#4 (19)
  2. {
  3. ["Sygnatura"]=>
  4. }
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Pokaż kod...
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #19





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Kod

XML, skróciłem dla dobra pokazu

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <DoSynchronizacji version="1" nazwaJednostki="xxx" jednostka="xx" dataOd="2014-12-11T09:54:35.0" dataDo="2014-12-11T10:01:24.0" dataUtworzenia="2014-12-11T10:01:24.0" xmlns="http://www.o9.pl" xmlns:ms="http://www.ms.gov.pl" xmlns:sl="http://www.o9.pl" xmlns:xsi="http://www.w9.org" xsi:schemaLocation="http://www.o11.pl">
  3. <ms:Rozkaz ID="00018814-DEAD-FEBA-0002-00000000000F">
  4. <ms:Sygnatura wydzial="I" repertorium="C" nr="10" rok="2014"/>
  5. <ms:Osoba ID="397082">
  6. <ms:AdresyOsoby>
  7. <ms:AdresKorespondencyjny ulica="ul. Wielka" nr_domu="1" nr_mieszkania="33" miejscowosc="Wrocław" poczta="Wrocław" kod="53-333" wojewodztwo="dolnośląskie" kraj="Polska"/>
  8. </ms:AdresyOsoby>
  9. </ms:Osoba>
  10. </ms:Rozkaz>
  11. </DoSynchronizacji>



PHP
  1. $xml = simplexml_load_file($nazwa2);
  2. $ns = $xml->getNamespaces(true);
  3.  
  4.  
  5. foreach ($xml->children($ns['ms']) as $child)
  6. {
  7.  
  8. // tu nie wypluwa nic
  9. echo "Oko : ".$oko=((string)$xml->Sygnatura['wydzial']);
  10.  
  11. // Tutaj jest ok. W całym XML występują te pozycje. W przykładzie wyżej nie.
  12. echo"<br>";
  13. $nazwisko=((string)$child->Osoba->Nazwisko);
  14. echo"Nazwisko : ".$nazwisko=iconv('utf-8','iso-8859-2', $nazwisko);
  15. echo"<br>";
  16. echo"PESEL : ".$pesel=((string)$child->Osoba->PESEL);
  17. echo"<br>";
  18. echo'<pre>'; var_dump($child); echo'</pre>';
  19. }


Ten post edytował 8_pasarzer_NOSTROMO 17.02.2015, 07:12:37
Go to the top of the page
+Quote Post
Pyton_000
post
Post #20





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


  1. ((string)$child->Sygnatura->attributes()['rok']);
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #21





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----



  1.  
  2. ((string)$child->Sygnatura->attributes()['rok']);
  3. // daje
  4. Parse error: syntax error, unexpected '[' in /var/www/wczytaj.php on line 109
  5.  
  6.  
  7. // Z kolei tak
  8. ((string)$child->Sygnatura->attributes());
  9. // daje wynik : I
  10. // Czyli pobiera pierwszą wartość z tablicy atrybutów (I, C, 10, 2014)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #22





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


No to przypisz wynik attributes() do zmiennej (bez rzutowania na string)
i wyciągnij jak z tablicy normlanie (tu już chyba z rzutowaniem)

To co Ci podałem zadziała na php >=5.5 zdaje się

Ten post edytował Pyton_000 17.02.2015, 09:46:39
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post
Post #23





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

Ostrzeżenie: (0%)
-----


Zrobiłem tak i działa, wklejam dla potomnych :

  1. $sygnatura = ($child->Sygnatura->attributes());
  2.  
  3. echo "Wydział : ".$sygnatura['wydzial'];
  4. echo "<br>repertorium : ".$sygnatura['repertorium'];
  5. echo "<br>nr : ".$sygnatura['nr'];
  6. echo "<br>rok : ".$sygnatura['rok'];


Pyton jestem Ci bardzo wdzięczny. Dopiero zaczynam z XML więc wybacz że może i głupoty pisałem, robiłem.

Pomógł x10 !
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 14:17