Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyrażenia regularne
busyboy
post 25.06.2020, 10:56:55
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


Witam.

Mam plik xml o następującej zawartości :

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <root>
  3. <priceMode>N</priceMode>
  4. <attributes/>
  5. <guid>35b7efa4-9a81-4998-bcfe-7e5f7e42fbbb</guid>
  6. <currency>PLN</currency>
  7. <priceTypeId>9</priceTypeId>
  8. <documentSeries>IZAM</documentSeries>
  9. <sourceDocument>IZAM/4545/2020 B</sourceDocument>
  10. <contractorId>7612</contractorId>
  11. <deliveryAddressType>896</deliveryAddressType>
  12. <deliveryAddressId>30566</deliveryAddressId>
  13. <payerId>7612</payerId>
  14. <warehouse>7</warehouse>
  15. <operator>85</operator>
  16. <documentDate>2020-06-24 03:20:15.000</documentDate>
  17. <reservation>0</reservation>
  18. <reservationStartDate>2020-06-24 03:20:15.000</reservationStartDate>
  19. <expirationDate>2020-06-24 03:20:15.000</expirationDate>
  20. <realizationDate>2020-06-24 03:20:15.000</realizationDate>
  21. <confirmDocument>0</confirmDocument>
  22. <description>IZAM/4545/2020 </description>
  23. <paymentType>20</paymentType>
  24. <paymentDays>21</paymentDays>
  25. <context>68</context>
  26. <akwNumber null="true"/>
  27. <targetContractorId null="true"/>
  28. <positions>
  29. </positions>
  30. </root>


Za pomocą

  1. $plik = file_get_contents("IN/$file");
  2. $plik = htmlspecialchars($plik);


Przypisuje jego zawartość do zmiennej $plik

W jaki sposób wyświetlić np wartość między znacznikami <guid>..........</guid> ?

Próbowałem to zrobić za pomocą preg_match ale niestety mi nie wychodzi sad.gif
Go to the top of the page
+Quote Post
nospor
post 25.06.2020, 11:07:24
Post #2





Grupa: Moderatorzy
Postów: 36 451
Pomógł: 6292
Dołączył: 27.12.2004




A po grzyba htmlspecialchars ?
No i po XML najlepiej porusza sie przy pomocy dedykowanych bibliotek do PDF


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
busyboy
post 25.06.2020, 11:08:43
Post #3





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


Po to htmlspecialchars aby wyświetlił mi znaczniki html z pliku

Potraktujmy ten plik xml tak jak zwykły plik txt, chodzi o wyciągnięcie danych między znacznikami

Ten post edytował busyboy 25.06.2020, 11:09:59
Go to the top of the page
+Quote Post
nospor
post 25.06.2020, 11:09:15
Post #4





Grupa: Moderatorzy
Postów: 36 451
Pomógł: 6292
Dołączył: 27.12.2004




No ale zdaje sie najpierw chcesz cos znalezc co nie? DO etapu wyswietlania jeszcze daleko


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 25.06.2020, 11:12:18
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Cytat(busyboy @ 25.06.2020, 12:08:43 ) *
Po to htmlspecialchars aby wyświetlił mi znaczniki html z pliku

Potraktujmy ten plik xml tak jak zwykły plik txt, chodzi o wyciągnięcie danych między znacznikami

Zdecydowanie nie należy xml traktować jako zwykły plik txt i robić sieczki regexpem. Masz odpowiednie biblioteki w php do tego, masz zewnętrzne ułatwiające czytanie (choćby z synfony).


--------------------
Go to the top of the page
+Quote Post
busyboy
post 25.06.2020, 11:16:12
Post #6





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


No tak ale to ma być jednorazowe wyciągnięcie danych z pliku xml, pewnie to nie dobre rozwiązanie ale proste
Go to the top of the page
+Quote Post
viking
post 25.06.2020, 11:19:28
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Ale jaki masz problem z jednorazowym wyciągnięciem tych danych za pomocą rzeczy do tego stworzonych skoro regexp jak mniemam nie umiesz i tak napisać?
Czy naprawdę użycie simplexml jest tak mega trudne do tego?


--------------------
Go to the top of the page
+Quote Post
busyboy
post 25.06.2020, 11:25:04
Post #8





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


Dalego proszę o pomoc w tym przykładzie, napisanie reguły do ciągu
Go to the top of the page
+Quote Post
viking
post 25.06.2020, 11:33:43
Post #9





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


https://www.php.net/manual/en/simplexml.examples-basic.php


--------------------
Go to the top of the page
+Quote Post
busyboy
post 25.06.2020, 11:56:33
Post #10





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


Dziękuje za link, ale jeżeli to możliwe proszę o przykład z wyrażeniami regularnymi....
Go to the top of the page
+Quote Post
viking
post 25.06.2020, 12:16:07
Post #11





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Nie ma problemu ale jeśli to możliwe pokaż jak za pomocą simplexml to zrobiłeś...


--------------------
Go to the top of the page
+Quote Post
busyboy
post 25.06.2020, 12:22:11
Post #12





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


Coś takiego

  1. $plik = file_get_contents("IN/$file");
  2. $dane = new SimpleXMLElement($plik);
  3. echo $dane->root[0]->positions;
Go to the top of the page
+Quote Post
viking
post 25.06.2020, 12:51:40
Post #13





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Na pewno nie coś takiego. Pokaż że nie czekasz tylko na gotowe i wybierz ten guid. A potem się zastanów czy 2 banalne linie kodu są tak dużo gorsze od zawodnego regexpa.


--------------------
Go to the top of the page
+Quote Post
javafxdev
post 25.06.2020, 13:46:06
Post #14





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 27.10.2015

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


tak z ciekawości jak wpadłeś na pomysł wpisania positions zamiast guid skoro chcesz mieć guid - co Cię naprowadziło na postions zamiast na guid?
Go to the top of the page
+Quote Post
busyboy
post 25.06.2020, 13:56:56
Post #15





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 22.02.2004

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


Kod poniżej :

  1. $xml = new SimpleXMLElement($plik);
  2. echo $xml->guid;


Pytanie a jak jest kilka znaczników np.

  1. <positions>
  2. <row>
  3. <productGid>407</productGid>
  4. <quantity>2</quantity>
  5. <netValue/>
  6. <description/>
  7. </row>
  8. <row>
  9. <productGid>409</productGid>
  10. <quantity>4</quantity>
  11. <netValue/>
  12. <description/>
  13. </row>
  14. <row>
  15. <productGid>408</productGid>
  16. <quantity>4</quantity>
  17. <netValue/>
  18. <description/>
  19. </row>
  20.  
  21. </positions>


Jak to odczytać ? w pętli ? mogę prosić jakiś przykład ?
Go to the top of the page
+Quote Post
viking
post 25.06.2020, 14:03:21
Post #16





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


  1. foreach($xml->positions->row as $row) {
  2. echo $row->productGid;
  3. };


--------------------
Go to the top of the page
+Quote Post
kreatiff
post 26.06.2020, 15:20:23
Post #17





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Wyświetli wszystkie guidy z pliku (ale jak jest jeden, to tylko jego). Nie wczytuje pliku do pamięci (jak jest mały, nie ma różnicy, jak plik ma kilka megabajtów, bo trudno o coś bardziej wydajnego niż XMLReader):
  1. $xml = new XMLReader;
  2. $xml->open('sciezka_do_twojego_pliku_xml/plik.xml');
  3. while($xml->read()) {
  4. if ($xml->name === 'guid') echo $xml->readString();
  5. }
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 14:57